<?xml version="1.0"?>
<drgenius><drgeo name="velocity addition by Lorentz Transform" scale="30.000000" origin_x="0.000000" origin_y="0.000000" grid="False"><point id="82E70E8" type="Free" color="Black" thickness="Thick" style="Cross" filled="False" masked="True" name=""><x>-17.933333</x><y>-0.033333</y></point><point id="82E6BC0" type="Free" color="Black" thickness="Thick" style="Cross" filled="False" masked="True" name=""><x>17.933333</x><y>-0.033333</y></point><line id="82E6C70" type="2pts" color="Black" thickness="Normal" style="Cross" filled="False" masked="False" name=""><parent ref="82E70E8"/><parent ref="82E6BC0"/></line><point id="82E6D68" type="On_curve" color="Red" thickness="Dashed" style="Cross" filled="False" masked="False" name="O"><value>0.981899</value><parent ref="82E6C70"/></point><point id="82E6E28" type="On_curve" color="Black" thickness="Thick" style="Cross" filled="False" masked="False" name="xA"><value>0.983883</value><parent ref="82E6C70"/></point><circle id="82E6EE8" type="2pts" color="Black" thickness="Normal" style="Cross" filled="False" masked="True" name=""><parent ref="82E6D68"/><parent ref="82E6E28"/></circle><line id="82DEE70" type="perpendicular" color="Black" thickness="Normal" style="Cross" filled="False" masked="False" name=""><parent ref="82E6D68"/><parent ref="82E6C70"/></line><point id="82DEF20" type="Intersection" color="Red" thickness="Dashed" style="Cross" filled="False" masked="True" name="" extra="0"><parent ref="82E6EE8"/><parent ref="82DEE70"/></point><point id="82DEFD0" type="Intersection" color="Black" thickness="Thick" style="Cross" filled="False" masked="False" name="tA" extra="1"><parent ref="82E6EE8"/><parent ref="82DEE70"/></point><point id="82DF090" type="Free" color="Red" thickness="Dashed" style="Cross" filled="False" masked="False" name="0"><x>-5.366666</x><y>3.383334</y></point><line id="82DF150" type="parallel" color="Black" thickness="Normal" style="Cross" filled="False" masked="True" name=""><parent ref="82DF090"/><parent ref="82E6C70"/></line><point id="82DF200" type="On_curve" color="Red" thickness="Dashed" style="Cross" filled="False" masked="False" name="c"><value>0.898634</value><parent ref="82DF150"/></point><point id="82DF2C0" type="Symmetry" color="Red" thickness="Dashed" style="Cross" filled="False" masked="False" name="-c"><parent ref="82DF200"/><parent ref="82DF090"/></point><segment id="82DF380" type="2pts" color="Black" thickness="Normal" style="Cross" filled="False" masked="False" name="[-cc]"><parent ref="82DF2C0"/><parent ref="82DF200"/></segment><point id="82DF468" type="Middle_2pts" color="Red" thickness="Dashed" style="Cross" filled="False" masked="True" name=""><parent ref="82DEFD0"/><parent ref="82E6E28"/></point><line id="82DF500" type="2pts" color="Yellow" thickness="Thick" style="Cross" filled="False" masked="False" name="light"><parent ref="82E6D68"/><parent ref="82DF468"/></line><point id="82DF5C8" type="On_curve" color="Red" thickness="Dashed" style="RectangularEmpty" filled="False" masked="False" name="u"><value>0.368133</value><parent ref="82DF380"/></point><script id="82DF688" type="nitems" color="Blue" thickness="Normal" style="Cross" filled="False" masked="True" name="alpha"><x>-6.600000</x><y>2.350000</y><parent ref="82DF5C8"/><code>(define v (- (* (getAbscissa a1) 2) 1))
(/ 1 (sqrt (- 1 (* v v))))
</code></script><script id="82DF998" type="nitems" color="Blue" thickness="Normal" style="Cross" filled="False" masked="True" name="beta"><x>-6.366666</x><y>1.716667</y><parent ref="82DF5C8"/><code>(define v (- (* (getAbscissa a1) 2) 1))
(/ v (sqrt (- 1 (* v v))))
</code></script><point id="82DFC10" type="Scale" color="Red" thickness="Dashed" style="Cross" filled="False" masked="True" name=""><parent ref="82E6E28"/><parent ref="82E6D68"/><parent ref="82DF688"/></point><point id="82DFCA8" type="Scale" color="Red" thickness="Dashed" style="Cross" filled="False" masked="True" name=""><parent ref="82DEFD0"/><parent ref="82E6D68"/><parent ref="82DF998"/></point><line id="82DFD40" type="parallel" color="Black" thickness="Normal" style="Cross" filled="False" masked="True" name=""><parent ref="82DFC10"/><parent ref="82DEE70"/></line><line id="82DFDF0" type="parallel" color="Black" thickness="Normal" style="Cross" filled="False" masked="True" name=""><parent ref="82DFCA8"/><parent ref="82E6C70"/></line><point id="82E02A8" type="Intersection" color="DarkBlue" thickness="Thick" style="Cross" filled="False" masked="False" name="xB" extra="0"><parent ref="82DFD40"/><parent ref="82DFDF0"/></point><locus id="82E0368" type="None" color="Black" thickness="Dashed" style="Cross" filled="False" masked="False" name=""><parent ref="82DF5C8"/><parent ref="82E02A8"/></locus><point id="82E1098" type="Reflexion" color="DarkBlue" thickness="Thick" style="Cross" filled="False" masked="False" name="tB"><parent ref="82E02A8"/><parent ref="82DF500"/></point><line id="82E1148" type="2pts" color="DarkBlue" thickness="Thick" style="Cross" filled="False" masked="False" name="(OxB)"><parent ref="82E6D68"/><parent ref="82E02A8"/></line><line id="82E1210" type="2pts" color="DarkBlue" thickness="Thick" style="Cross" filled="False" masked="False" name="(OtB)"><parent ref="82E6D68"/><parent ref="82E1098"/></line><point id="82E12D8" type="On_curve" color="Red" thickness="Dashed" style="RectangularEmpty" filled="False" masked="False" name="v"><value>0.774726</value><parent ref="82DF380"/></point><script id="82E13E0" type="nitems" color="Blue" thickness="Normal" style="Cross" filled="False" masked="Alway" name=""><x>0.000000</x><y>0.000000</y><parent ref="82E12D8"/><code>(define v (- (* (getAbscissa a1) 2) 1))
(/ 1 (sqrt (- 1 (* v v))))
</code></script><point id="82E1570" type="Scale" color="Red" thickness="Dashed" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E02A8"/><parent ref="82E6D68"/><parent ref="82E13E0"/></point><line id="82E16E0" type="parallel" color="Black" thickness="Normal" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E1570"/><parent ref="82E1210"/></line><script id="82E1778" type="nitems" color="Blue" thickness="Normal" style="Cross" filled="False" masked="Alway" name=""><x>0.000000</x><y>0.000000</y><parent ref="82E12D8"/><code>(define v (- (* (getAbscissa a1) 2) 1))
(/ v (sqrt (- 1 (* v v))))
</code></script><point id="82E1A60" type="Scale" color="Red" thickness="Dashed" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E1098"/><parent ref="82E6D68"/><parent ref="82E1778"/></point><line id="82E1AF8" type="parallel" color="Black" thickness="Normal" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E1A60"/><parent ref="82E1148"/></line><point id="82E1B90" type="Intersection" color="DarkGreen" thickness="Thick" style="Cross" filled="False" masked="False" name="xC" extra="0"><parent ref="82E16E0"/><parent ref="82E1AF8"/></point><point id="82E1C38" type="Middle_2pts" color="Red" thickness="Dashed" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E1098"/><parent ref="82E02A8"/></point><line id="82E1CD0" type="2pts" color="Black" thickness="Normal" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E6D68"/><parent ref="82E1C38"/></line><point id="82E1D68" type="Reflexion" color="DarkGreen" thickness="Thick" style="Cross" filled="False" masked="False" name="tC"><parent ref="82E1B90"/><parent ref="82E1CD0"/></point><line id="82E1E28" type="2pts" color="DarkGreen" thickness="Thick" style="Cross" filled="False" masked="False" name="(OxC)"><parent ref="82E6D68"/><parent ref="82E1B90"/></line><line id="82E1EC0" type="2pts" color="DarkGreen" thickness="Thick" style="Cross" filled="False" masked="False" name="(OtC)"><parent ref="82E6D68"/><parent ref="82E1D68"/></line><point id="82E1F58" type="Free" color="Bordeaux" thickness="Thick" style="RectangularEmpty" filled="False" masked="False" name="P"><x>6.366667</x><y>2.983333</y></point><line id="82E2018" type="parallel" color="Black" thickness="Normal" style="Cross" filled="False" masked="True" name=""><parent ref="82E1F58"/><parent ref="82E1148"/></line><line id="82E20C8" type="parallel" color="Black" thickness="Normal" style="Cross" filled="False" masked="True" name=""><parent ref="82E1F58"/><parent ref="82E1210"/></line><point id="82E2178" type="Intersection" color="Bordeaux" thickness="Dashed" style="Round" filled="False" masked="False" name="" extra="0"><parent ref="82E1210"/><parent ref="82E2018"/></point><point id="82E2228" type="Intersection" color="Bordeaux" thickness="Dashed" style="Rectangular" filled="False" masked="False" name="" extra="0"><parent ref="82E1148"/><parent ref="82E20C8"/></point><line id="82E22D8" type="perpendicular" color="Black" thickness="Normal" style="Cross" filled="False" masked="True" name=""><parent ref="82E2228"/><parent ref="82DF500"/></line><line id="82E2388" type="perpendicular" color="Black" thickness="Normal" style="Cross" filled="False" masked="True" name=""><parent ref="82E02A8"/><parent ref="82DF500"/></line><point id="82E2438" type="Intersection" color="Red" thickness="Dashed" style="Cross" filled="False" masked="True" name="" extra="0"><parent ref="82E22D8"/><parent ref="82DF500"/></point><point id="82E24E8" type="Intersection" color="Red" thickness="Dashed" style="Cross" filled="False" masked="True" name="" extra="0"><parent ref="82E2388"/><parent ref="82DF500"/></point><script id="82E2598" type="nitems" color="DarkBlue" thickness="Normal" style="Cross" filled="False" masked="False" name="PxB"><x>5.366666</x><y>-2.683333</y><parent ref="82E6D68"/><parent ref="82E24E8"/><parent ref="82E2438"/><code>(define a (car (getCoordinates a1)))
(define b (car (getCoordinates a2)))
(define c (car (getCoordinates a3)))
(/ (- c a) (- b a))
</code></script><line id="82E27E8" type="perpendicular" color="Black" thickness="Normal" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E1098"/><parent ref="82DF500"/></line><point id="82E29D0" type="Intersection" color="Red" thickness="Dashed" style="Cross" filled="False" masked="Alway" name="" extra="0"><parent ref="82E27E8"/><parent ref="82DF500"/></point><line id="82E2A68" type="perpendicular" color="Black" thickness="Normal" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E2178"/><parent ref="82DF500"/></line><point id="82E2B00" type="Intersection" color="Red" thickness="Dashed" style="Cross" filled="False" masked="Alway" name="" extra="0"><parent ref="82E2A68"/><parent ref="82DF500"/></point><script id="82E2B98" type="nitems" color="DarkBlue" thickness="Normal" style="Cross" filled="False" masked="False" name="PtB"><x>5.400000</x><y>-3.166667</y><parent ref="82E6D68"/><parent ref="82E29D0"/><parent ref="82E2B00"/><code>(define a (car (getCoordinates a1)))
(define b (car (getCoordinates a2)))
(define c (car (getCoordinates a3)))
(/ (- c a) (- b a))
</code></script><line id="82E2C50" type="2pts" color="Black" thickness="Normal" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E6D68"/><parent ref="82E1B90"/></line><line id="82E2D70" type="2pts" color="Black" thickness="Normal" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E6D68"/><parent ref="82E1D68"/></line><line id="82E2F28" type="parallel" color="Black" thickness="Normal" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E1F58"/><parent ref="82E2D70"/></line><point id="82E2FC0" type="Intersection" color="Bordeaux" thickness="Dashed" style="Round" filled="False" masked="False" name="" extra="0"><parent ref="82E2C50"/><parent ref="82E2F28"/></point><line id="82E3058" type="parallel" color="Black" thickness="Normal" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E1F58"/><parent ref="82E2C50"/></line><point id="82E30F0" type="Intersection" color="Bordeaux" thickness="Dashed" style="Round" filled="False" masked="False" name="" extra="0"><parent ref="82E2D70"/><parent ref="82E3058"/></point><line id="82E31A0" type="perpendicular" color="Black" thickness="Normal" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E1B90"/><parent ref="82DF500"/></line><point id="82E3250" type="Intersection" color="Red" thickness="Dashed" style="Cross" filled="False" masked="Alway" name="" extra="0"><parent ref="82E31A0"/><parent ref="82DF500"/></point><line id="82E32E8" type="perpendicular" color="Black" thickness="Normal" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E2FC0"/><parent ref="82DF500"/></line><point id="82E3380" type="Intersection" color="Red" thickness="Dashed" style="Cross" filled="False" masked="Alway" name="" extra="0"><parent ref="82E32E8"/><parent ref="82DF500"/></point><script id="82E3418" type="nitems" color="DarkGreen" thickness="Normal" style="Cross" filled="False" masked="False" name="PxC"><x>-6.433333</x><y>-3.333333</y><parent ref="82E6D68"/><parent ref="82E3250"/><parent ref="82E3380"/><code>(define a (car (getCoordinates a1)))
(define b (car (getCoordinates a2)))
(define c (car (getCoordinates a3)))
(/ (- c a) (- b a))
</code></script><line id="82E3628" type="perpendicular" color="Black" thickness="Normal" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E1D68"/><parent ref="82DF500"/></line><point id="82E37F0" type="Intersection" color="Red" thickness="Dashed" style="Cross" filled="False" masked="Alway" name="" extra="0"><parent ref="82E3628"/><parent ref="82DF500"/></point><line id="82E3888" type="perpendicular" color="Black" thickness="Normal" style="Cross" filled="False" masked="Alway" name=""><parent ref="82E30F0"/><parent ref="82DF500"/></line><point id="82E3920" type="Intersection" color="Red" thickness="Dashed" style="Cross" filled="False" masked="Alway" name="" extra="0"><parent ref="82E3888"/><parent ref="82DF500"/></point><script id="82E39B8" type="nitems" color="DarkGreen" thickness="Normal" style="Cross" filled="False" masked="False" name="PtC"><x>-6.300000</x><y>-3.833333</y><parent ref="82E6D68"/><parent ref="82E37F0"/><parent ref="82E3920"/><code>(define a (car (getCoordinates a1)))
(define b (car (getCoordinates a2)))
(define c (car (getCoordinates a3)))
(/ (- c a) (- b a))
</code></script></drgeo><text name="English">Here we show three frames (coordinate systems) moving relative to each other: 
we observe from the black frame "A", while the blue frame "B" moves at the speed 
of u relative to "A", and the green frame "C" moves at the speed of v relative to "B". 
The magnitude of u and v can be controlled by the two points on the line segment, 
with -c &lt; u,v &lt; c. We mark the unit length for frame "A" as "xA" and the unit duration 
of time for frame "A" as "tA". Ditto for frames "B" and "C". Finally, the yellow line is 
the world line of a light ray.

First let's simplify the picture a bit by making u=0 so that frame B overlaps frame A,
i.e., the blue frame becomes orthogonal and coincide with the black frame. 
Now slide v back and forth to see how frame C changes. Notice that xC the unit point 
moves along a hyperbola, as it should be according to the Lorentz Transform. 
So does xT along another hyperbola. The large brown square mark P represents some 
event. Its coordinates with respect to frame B is computed as PxB and PtB. This is found 
by drawing two lines through B, one parallel to the xB axis, the other parallel to the tB axis. 
From the intersections (the small brown dots) one can compute the ratio with the unit 
lengths to obtain PxB and PtB. Ditto for frame C. Now you can add a few lines and points 
to this figure in order to test your understanding of the Lorentz Transform:

   1. Please explain the length contraction effect.
   2. Please explain the time dilation effect.
   3. Please explain the dependence of simultaneity upon the choice of the obvervation frame 

You can move v along the segment to see how the amount of each effect varies with the 
relative speed of C to B.

One thing that puzzles most people first learning the Lorentz transform is the question: 
How can it be the case that things in frame B looks like shortened, slow motion in frame C's 
eyes, while things in frame C also (by the principle of relativity) looks like shortened, slow 
motion in frame B's eyes? So now we (frame A, the black frame) will catch up with frame C 
and observe from their eyes in order to answer this question. This is achieved by moving 
u away from 0 until frame C overlaps frame A, i.e., the green frame becomes orthogonal 
and coincide with the black frame. In fact this happens when u=-v, i.e., when B (blue) moves 
at speed -v relative A (black), and C (green) moves at speed v relative to B (blue). 
See? The situation is exactly mirrored (and I mean it geometrically, too) from C's point of view. 
The amount of length contraction and time dilation is exactly the same as what B observes of C, 
except that the obvserved direction of motion is opposite.

This Dr. Geo figure also shows that the addition of velocities under the Lorentz Transform 
can never exceed the speed of light, which is also (less visually) seen by the formula 
(u+v)/(1+uv/c^2). 

http://people.ofset.org/~ckhung/b/phy/lorentz.en.php
</text><text name="Fran&#xE7;ais">Nous voyons ici trois r&#xE9;f&#xE9;rentiels (syst&#xE8;mes de coordonn&#xE9;es) en mouvement relatif :
nous observons depuis le r&#xE9;f&#xE9;rentiel noir "A", tandis que le r&#xE9;f&#xE9;rentiel bleu "B" se 
d&#xE9;place &#xE0; la vitesse u relativement &#xE0; "A", et le r&#xE9;f&#xE9;rentiel vert "C" se d&#xE9;place &#xE0; la 
vitesse v relativement &#xE0; "B". Les valeurs de u et v peuvent &#xEA;tre contr&#xF4;l&#xE9;es par deux
points sur le segment, avec -c &lt; u,v &lt; c. Nous marquons l'unit&#xE9; de longueur pour le 
r&#xE9;f&#xE9;rentiel "A" comme "xA", et l'unit&#xE9; de temps pour le r&#xE9;f&#xE9;rentiel "A" comme "tA".
De m&#xEA;me pour les r&#xE9;f&#xE9;rentiels "B" et "C". Finalement, la ligne jaune est la ligne 
d'univers d'un rayon de lumi&#xE8;re.

Commen&#xE7;ons par simplifier la figure un peu en faisant u=0 de telle fa&#xE7;on que le
r&#xE9;f&#xE9;renciel B se superpose au r&#xE9;f&#xE9;rentiel A, c'est &#xE0; dire que le r&#xE9;f&#xE9;rentiel bleu
devienne orthogonal et co&#xEF;ncide avec le r&#xE9;f&#xE9;rentiel noir. Maintenant tirons v de part
et d'autre pour foir comment le r&#xE9;f&#xE9;rentiel C change. Notons que le point xC signifiant
l'unit&#xE9; de longueur se d&#xE9;place le long d'une hyperbole, comme il se doit d'apr&#xE8;s la 
formule de Lorentz. Le point xT en fait autant le long d'une autre hyperbole. La grande
marque marron carr&#xE9;e P repr&#xE9;sente un &#xE9;v&#xE8;nement quelconque. Ses coordonn&#xE9;es 
dans le r&#xE9;f&#xE9;rentiel B sont calcul&#xE9;es comme PxB et PtB. On peut les retrouver en 
tra&#xE7;ant deux lignes dans B, une parall&#xE8;le &#xE0; l'axe xB l'autre parall&#xE8;le &#xE0; l'axe xT. D'apr&#xE8;s
les projections (les petits points marrons) on peut calculer le quotient avec l'unit&#xE9;
nde lobgueur pour obtenir PxB et PtB. De m&#xEA;me pour le r&#xE9;f&#xE9;rentiel C. Vous pouvez
ajouter maintenant quelques lignes et points &#xE0; cette figure pour tester votre 
compr&#xE9;hension de la transformation de Lorentz :

   1. Essayez d'expliquer l'effet de contraction des longueurs
   2. Essayez d'expliquer l'effet de dilatation du temps
   3. Essayez d'expliquer pourquoi la simultan&#xE9;&#xEF;t&#xE9; d&#xE9;pend du choix du r&#xE9;f&#xE9;rentiel 
       pour l'observation

Vous pouvez d&#xE9;placer v le long du segment pour voir comment l'incidence de chaque 
effet varie selon les vitesses relatives de C et B.

Une des choses qui intrigue le plus les personnes commen&#xE7;ant &#xE0; &#xE9;tudier la
transformation de Lorentz est la question : comment peut-il se faire que les choses
dans le r&#xE9;f&#xE9;rentiel B apparaissent raccourcies, comparativement &#xE0; ce qu'elles
sont lors d'un mouvement lent pour un observateur dans le r&#xE9;f&#xE9;rentiel C, cependant
que les choses dans le r&#xE9;f&#xE9;rentiel C aussi (d'apr&#xE8;s le principe de relativit&#xE9;) paraissent
raccourcies, comparativement &#xE0; ce qu'elles sont lors d'un mouvement lent pour un 
observateur dans le r&#xE9;f&#xE9;rentiel B ? Maintenant, nous (dans le r&#xE9;f&#xE9;rentiel A, lignes noires)
allons sauter dans le r&#xE9;f&#xE9;rentiel C et observer depuis ce point de vue pour r&#xE9;pondre &#xE0; 
cette question. Pour ce faire, on d&#xE9;place u hors du z&#xE9;ro jusqu'&#xE0; ce que les lignes de C
recouvrent celles de A, c'est &#xE0; dire que les lignes vertes deviennent orthogonales et
co&#xEF;ncident avec les lignes noires. En fait cela se produit quand u = -v, c'est &#xE0; dire quand
B (bleu) se d&#xE9;place &#xE0; la vitesse -v relativement &#xE0; A, cependant que C (vert) se d&#xE9;place &#xE0; 
la vitesse v par rapport &#xE0; B (bleu). Compris ? La situation est exactement en miroir (et
on entends &#xE7;a au sens g&#xE9;om&#xE9;rique aussi) depuis le point de vue de C, sauf que la
direction de d&#xE9;placement observ&#xE9;e est l'oppos&#xE9;.

Cette figure Dr. Geo montre aussi que l'addition des vitesses gouvern&#xE9;e par la 
transformation de Lorentz ne peut jamais d&#xE9;passer la vitesse de la lumi&#xE8;re, ce qui
appara&#xEE;t aussi de fa&#xE7;on moins visuelle &#xE0; l'examen de la formule
(u+v)/(1+uv/c^2). 

http://people.ofset.org/~ckhung/b/phy/lorentz.en.php
</text><macro name="Lorentz"><description>Lorentz Transform.
Input:
u: scalar between -1 and 1 
O: origin
    xA: unit point along the x-axis
    xT: unit point along the t-axis
    O-xA: x-axis
    O-tA: y-axis
Output:
    xB: unit point along the x'-axis
    tB: unit point along the t'-axis
   </description><input><kernel category="4"/><kernel category="4"/><kernel category="4"/><kernel category="1"/><kernel category="8"/><kernel category="8"/></input><intermediate><kernel type="1" category="32768" extra="(define v (- (* (getAbscissa a1) 2) 1))&#10;(/ 1 (sqrt (- 1 (* v v))))&#10;" final="False"><parent ref="1"/></kernel><kernel type="16" category="1" final="False"><parent ref="3"/><parent ref="2"/><parent ref="7"/></kernel><kernel type="128" category="8" final="False"><parent ref="8"/><parent ref="6"/></kernel><kernel type="1" category="32768" extra="(define v (- (* (getAbscissa a1) 2) 1))&#10;(/ v (sqrt (- 1 (* v v))))&#10;" final="False"><parent ref="1"/></kernel><kernel type="16" category="1" final="False"><parent ref="4"/><parent ref="2"/><parent ref="10"/></kernel><kernel type="128" category="8" final="False"><parent ref="11"/><parent ref="5"/></kernel><kernel type="256" category="1" extra="0" final="True"><parent ref="9"/><parent ref="12"/></kernel><kernel type="1024" category="1" final="False"><parent ref="4"/><parent ref="3"/></kernel><kernel type="32" category="8" final="False"><parent ref="2"/><parent ref="14"/></kernel><kernel type="4" category="1" final="True"><parent ref="13"/><parent ref="15"/></kernel><kernel type="32" category="8" final="True"><parent ref="2"/><parent ref="13"/></kernel><kernel type="32" category="8" final="True"><parent ref="2"/><parent ref="16"/></kernel></intermediate></macro><macro name="coord"><description>compute the coordinate
    PxB
given
    O: the origin
    light: the 45 degree line
    xB: the unit point along an axis
    xP: the point to measure coordinate</description><input><kernel category="4"/><kernel category="8"/><kernel category="1"/><kernel category="1"/></input><intermediate><kernel type="256" category="8" final="False"><parent ref="3"/><parent ref="2"/></kernel><kernel type="256" category="1" extra="0" final="False"><parent ref="5"/><parent ref="2"/></kernel><kernel type="256" category="8" final="False"><parent ref="4"/><parent ref="2"/></kernel><kernel type="256" category="1" extra="0" final="False"><parent ref="7"/><parent ref="2"/></kernel><kernel type="1" category="32768" extra="(define a (car (getCoordinates a1)))&#10;(define b (car (getCoordinates a2)))&#10;(define c (car (getCoordinates a3)))&#10;(/ (- c a) (- b a))&#10;" final="True"><parent ref="1"/><parent ref="6"/><parent ref="8"/></kernel></intermediate></macro><macro name="coords"><description>computes:
    PxB: x-coordinate
    PtB: t-coordinate
    and the two projections along the axes
given:
    O: origin
    Light: 45 degree line
    xB: unit point along x-axis
    tB: unit point along t-axis
    P: the point to measure coords
</description><input><kernel category="4"/><kernel category="8"/><kernel category="1"/><kernel category="1"/><kernel category="2"/></input><intermediate><kernel type="32" category="8" final="False"><parent ref="1"/><parent ref="3"/></kernel><kernel type="32" category="8" final="False"><parent ref="1"/><parent ref="4"/></kernel><kernel type="128" category="8" final="False"><parent ref="5"/><parent ref="7"/></kernel><kernel type="256" category="1" extra="0" final="True"><parent ref="6"/><parent ref="8"/></kernel><kernel type="128" category="8" final="False"><parent ref="5"/><parent ref="6"/></kernel><kernel type="256" category="1" extra="0" final="True"><parent ref="7"/><parent ref="10"/></kernel><kernel type="256" category="8" final="False"><parent ref="3"/><parent ref="2"/></kernel><kernel type="256" category="1" extra="0" final="False"><parent ref="12"/><parent ref="2"/></kernel><kernel type="256" category="8" final="False"><parent ref="9"/><parent ref="2"/></kernel><kernel type="256" category="1" extra="0" final="False"><parent ref="14"/><parent ref="2"/></kernel><kernel type="1" category="32768" extra="(define a (car (getCoordinates a1)))&#10;(define b (car (getCoordinates a2)))&#10;(define c (car (getCoordinates a3)))&#10;(/ (- c a) (- b a))&#10;" final="True"><parent ref="1"/><parent ref="13"/><parent ref="15"/></kernel><kernel type="256" category="8" final="False"><parent ref="4"/><parent ref="2"/></kernel><kernel type="256" category="1" extra="0" final="False"><parent ref="17"/><parent ref="2"/></kernel><kernel type="256" category="8" final="False"><parent ref="11"/><parent ref="2"/></kernel><kernel type="256" category="1" extra="0" final="False"><parent ref="19"/><parent ref="2"/></kernel><kernel type="1" category="32768" extra="(define a (car (getCoordinates a1)))&#10;(define b (car (getCoordinates a2)))&#10;(define c (car (getCoordinates a3)))&#10;(/ (- c a) (- b a))&#10;" final="True"><parent ref="1"/><parent ref="18"/><parent ref="20"/></kernel></intermediate></macro></drgenius>
