Introduction:

The linear Lorentz transformation of Special relativity can evaluate the coordinates of an event in a moving frame of reference from the corresponding coordinates in the stationary frame of reference. In this project, I have used the Poincare transformation, which generalises the Lorentz transformation to any possible initial configuration. However, applying the Poincare transformation to a complex object is not sufficient to simulate relativistic transformations. Simulating a relativistic transformation should give the ‘apparent’ position/shape of the object, as would be seen by a stationary observer, whereas a Poincare’ transformation gives the actual position/shape of the object. Distinguishing between the ‘apparent’ and ‘actual’ position of the object requires taking into account the ‘time delay’ of light, which is explained below.

The Problem for a Point - Time Delay:

Simulating how objects look like when moving near the speed of light has been a controversial problem over the past century. To understand the source of confusion, imagine a point moving past you at 0.9c (90 percent of the speed of light). At time t = 0s on your watch, both you and the point are at x = 0. After time t = 10s on your watch, the actual position of the point will be at 9c metres away from you whereas the apparent position of the point will be somewhere in between 0 and 9c metres. This is simply because light must have been emitted by the point at an earlier time to ultimately reach your eyes at time t = 10s on your watch. And since the speed of the point is very close to the speed of light, the light from the object must have been emitted at about halfway. Therefore, solving this problem not only requires Poincare transformations but also the so called 'time delay ' of light, which allows us to distinguish between the 'apparent' and 'actual' positions of the object.

The Problem for an Object - Parameterization:

Assuming that we have evaluated the required transformation law for a point, which gives us the 'apparent' position of a point at a time 't' on the observer's watch, the question of extending the same to a 3-D object still remains. A straightforward approach would be to first divide the object into
n
points, evaluate the transformation for every point, and then join the points together to form the apparent view of the object. However, the issue with this computation is its slow runtime, large memory usage, and lack of precision. Since reproducing the object with 100 percent accuracy requires
n=∞
, there will be a trade off between high precision and low runtime as both runtime and precision increase as
n
increases. On inspection, we can determine that parametrization of a 3-D shape by 2 variables (surfaces in 3-D Euclidean space are parametrized by 2 variables) can help achieve the desired result with 100 percent accuracy and a faster runtime! To understand why, let's parameterize a sphere with spherical polar coordinates and plot it using Mathematica's ParametricPlot3D function:
In[]:=
Manipulate[​​Show[​​Graphics3D[{{Red,PointSize[0.02],Point[{{0,0,0}}]}},AxesTrue,PlotRange{{-r+x-1,r+x+1},{-r+y-1,r+y+1},{-r-z-1,r+z+1}}],​​ParametricPlot3D[{x+(r*Sin[θ]*Sin[ϕ]),y+(r*Sin[θ]*Cos[ϕ]),z+(r*Cos[θ])},{θ,0,π},{ϕ,0,2π}]​​],​​{r,1,10},{x,0,5},{y,0,5},{z,0,5},SaveDefinitionsTrue​​]
Out[]=
​
r
x
y
z
Here
θ
ranges from 0 to
π
, ϕ ranges from 0 to 2
π
, and
x,y,z
are the coordinates of the center of the sphere. There are 2 reasons why this plot may be the ideal way to transform every single point on the sphere to create the new apparent shape:
◼
  • Since any coordinate on the surface of a sphere can be written as {
    x
    + (
    r
    . Sin[θ]. Sin[ϕ] ),
    y
    + (
    r
    . Sin[θ]. Cos[ϕ] ), z + (
    r
    .Cos[θ] ) } , we can easily find the resulting coordinate by just substituting {
    x
    + (
    r
    . Sin[θ]. Sin[ϕ] ),
    y
    + (
    r
    . Sin[θ]. Cos[ϕ] ), z + (
    r
    . Cos[θ] ) } into the relevant function for a point:
  • PointTransform[ {
    x
    + (
    r
    . Sin[θ]. Sin[ϕ] ),
    y
    + (
    r
    . Sin[θ]. Cos[ϕ] ), z + (
    r
    .Cos[θ] ) } ]
    
    {
    f
    x
    (x,θ,ϕ)
    ,
    f
    y
    (y,θ,ϕ)
    ,
    f
    z
    (z,θ,ϕ)
    } where
    f
    x
    (x,θ,ϕ)
    ,
    f
    y
    (y,θ,ϕ)
    ,
    f
    z
    (z,θ,ϕ)
    are arbitrary functions which can be determined once we find PointTransform[] (we will evaluate this function in section 1.1).
    ◼
  • At this point, the reader might argue that parameterization of the surface is unnecessary since we can just evaluate point transform on the coordinate
    {x,y,F(x,y)}
    , where
    F(x,y)=+-
    0.5
    
    2
    r
    -
    2
    x
    -
    2
    y
    
    in this case, without parameterization. This reason is valid except that the domain of this non-parameterized plot will vary for different situations such as different speeds of the object, different directions of movement, etc. To understand this statement better, let’s think about the parameters PointTransform might depend on (other than the coordinate of the point itself). It will certainly depend on the speed of the object, the time at which the point is seen (the time according to the stationary observer’s watch), and the direction of velocity. Therefore, it is reasonable to conclude that because PointTransform[{
    x,y,F(x,y)}
    ] will vary for different situations, the domain of the function
    F(x,y)
    will also vary. This still might seem confusing, so let's look at plots of spheres travelling at 0.9 times the speed of light in the
    x
    -direction, one at time
    t=0s
    and the other at
    t=10s
    on the observer's watch (we will generate these shapes in 'The Final Interface' section) :
  • As we can see, the domain of both of these spheres are different - for the first sphere, the
    x
    coordinate ranges from about -4 to 10 while for the second sphere, the
    x
    coordinate ranges from about 4.5 to 4.9. So, if we use the non-parameterized version, we will first compute the exact domain for each specific situation followed by using Plot3D to plot the sphere. On the other hand, we do not have to worry about domains for parametrized plots. In this case, for instance, the domain of
    θ
    and ϕ will remain the same i.e. [0,
    π
    ] and [0, 2
    π
    ] respectively. The plot of the sphere after performing PointTransform[]:
    ParametricPlot3D[{
    f
    x
    (x,θ,ϕ),
    f
    y
    (y,θ,ϕ),
    f
    z
    (z,θ,ϕ)},{θ,0,π},{ϕ,0,2π}]

    The PointTransform[ ] function:

    We will now look at a brief overview of the mathematical equations taking into account time delay. Our goal is to find a function that will determine the 'apparent coordinate' of a point at a time
    t
    on the observer's watch. Assume that there are 2 reference frames
    S
    and
    S'
    , and
    S'
    moves with a velocity
    
    β
    =
    {
    v
    x
    /c
    ,
    v
    y
    /c,
    v
    z
    /c
    } with respect to
    S
    . Assume that at time
    t=0s
    on both clocks, the origin of
    S'
    is at a displacement of
    
    A
    from the origin of
    S
    , i.e. the initial displacement four-vector
    
    a
    is (0,
    
    A
    ). Note that
    
    β
    is not a four velocity - it's just the ordinary velocity scaled down by a factor of
    c
    (the speed of light). Assume that a particle
    P
    is moving with respect to the frame
    S
    and its world line parametrized by the time on the observer's clock (
    0
    x
    p
    ) is {
    0
    x
    p
    ,
    1
    x
    p
    
    0
    x
    p
    
    ,
    2
    x
    p
    
    0
    x
    p
    ,
    3
    x
    p
    
    0
    x
    p
    
    . Note that
    0
    x
    p
    =
    0
    ct
    p
    . For the observer to see the particle at time
    t
    obs
    i.e. at time
    0
    x
    obs
    , the following relation must be satisfied:
    2
    
    0
    x
    -
    0
    x
    obs
    
    =
    2
    i
    x
    -
    i
    x
    obs
    
    So
    0
    x
    is the time light must have been emitted according to the observer's clock and
    0
    x
    obs
    is the time light reached the observer according to the observer's clock. It is now obvious that these two events will have lightlike separation (the event of the emission of light from the point lies on the backward light cone of the observer) , which also explains the equation above. To make use of the Poincare' transformation, we must incorporate the moving frame of reference into the picture. To do so, let's assume that the point particle is moving with a velocity
    
    β
    alongside
    S'
    . Mathematically, this means that the position of point
    P
    with respect to
    S'
    remains constant, as both of them move side by side. If the position vector joining the origin of
    S'
    to point P is
    
    0
    , then
    S'
    forms the frame of reference of
    P
    . For now, however, let's assume that the Point
    P
    is at a position
    
    
    x
    from the origin of S'. Also, we will assume that the observer is at the position
    
    x
    obs
    with respect to the origin of
    S
    .
    Now, we can use the Poincare' transformation to calculate
    '0
    x
    - the time light must have been emitted according to the moving frame's clock to reach the observer at
    0
    x
    obs
    according to the observer's clock. It is not hard to see that if we substitute the Poincare' transformation (which is essentially the Lorentz transformation + the initial displacement four-vector
    
    a
    ) in the equation above, we will get a quadratic equation. To see this using Mathematica, we will use Symbolize[ ] to explicitly see vectors in our equations:
    In[]:=
    Needs["Notation`"]​​Off[Symbolize::bsymbexs]​​Symbolize
    γ
    ;Symbolize
    
    a
    ;Symbolize
    
    β
    ;Symbolize
    0
    x
    obs
    ;​​Symbolize
    
    x
    obs
    ;​​Symbolize
    
    
    x
    ;​​avec=
    
    a
    ;betavec=
    
    β
    ;xobservertime=
    0
    x
    obs
    ;gamma=γ;xobserverpos=
    
    x
    obs
    ;​​xprimevec=
    
    
    x
    ;
    To tell Mathematica that xobserverpos, betavec, avec, xprimevec are vectors, we use Assumptions:
    In[]:=
    $Assumptions=(avec|xprimevec|xobserverpos|betavec)∈Vectors[3]
    Out[]=
    
    
    a
    
    
    
    x
    
    
    x
    obs
    
    
    β
    ∈Vectors[3,]
    We will now use the results from the paper Visual appearance of wireframe objects in special relativity by Thomas Muller and Sebastian Boblest which solves the aforementioned quadratic equation. We can solve the equation in Mathematica as well, but since the computation is fairly straightforward, we will borrow the results from the paper and use Mathematica for more complex computations afterwards. We define the quantity ρ as:
    In[]:=
    ρ = gamma*(betavec.xprimevec)-xobservertime;TensorExpand[ρ]
    Out[]=
    -
    0
    x
    obs
    +γ
    
    
    x
    .
    
    β
    We have used the TensorExpand[] function in Mathematica to simplify the expressions. We now define a couple more variables to use in our calculations:
    In[]:=
    ρ = gamma*(betavec.xprimevec)-xobservertime;​​η = xprimevec+(gamma^2/(gamma+1))(betavec.xprimevec)*betavec + avec-xobserverpos;​​ωsquare=gamma^2((betavec.η - ρ)^2) - ρ^2 + η.η;​​TensorExpand[η]​​TensorExpand[ωsquare]

    Tests for our model:

    Test 1 - The Doppler Effect:

    Evaluating the PointTransform for the above parameters, we obtain:

    Test 2 - The classical limit:

    As can be seen from the above equation, if the speed of the object is taken to be 0, then the apparent position of the point is the same as the actual position of the point (recall that 'avector' is the initial separation of the two reference frames and 'xprimevec' is the position of the point with respect to the moving frame of reference. Also, since the speed of the point is 0, the time at which the point is measured is irrelevant.

    Test 3 - Intuition:

    In the first section, we estimated that the apparent position of a point travelling at 0.9c after 10 seconds in the x-direction will be at about halfway between 0 and 9c metres. Let's use PointTransform[] to get the exact value:
    As we can see from the above result, the apparent position of the point is at 4.74684 c metres, which verifies out intuitive result.

    Apparent shape for Complex Objects - The Final Interface:

    The final code for the transformation:
    The explanations of the code above and other interesting observations are given in the following sections:

    Apparent shape of a fast moving Sphere:

    Having evaluated the transformation for a single point, we can now use Parameterization to evaluate the transformation for a sphere. Recall the equations:
    Another interesting result we obtain for a different direction of movement:
    Guess the direction of movement from the above image!

    Apparent shape of a fast moving Line:

    To evaluate the transformation for a line, I split up the line into 20 points and then evaluated the transformation for every point on the line, and then joined all the points together to form the new line. Parameterization of the line would have been much easier, but just out of curiosity, I wanted to see the degree of accuracy when I split the line into a number of points. And surprisingly, the line was pretty accurate! I used the subdivide function to split the line into 20 points, and then I evaluated the transformation for each point followed by joining the points together. The function I used:
    This function is similar to the GetSphereCoordinates, and it uses the same method of determining the direction of velocity.

    Apparent shape of a fast moving Cube:

    For a cube, I used a straightforward approach. I used MeshCoordinates to get the coordinates of 8 vertices and then constructed 12 lines representing each of the edges of the cube. By using my function LineCoordinates, I found the new shape of the 12 edges and then joined them together to form the new Cube. The function I used:
    Then, to get the coordinates of each line, I used:
    line1 = LineCoordinates[GetCubeCoordinates[size, x, y, z, yrotate, zrotate, 1], GetCubeCoordinates[size, x, y, z, yrotate, zrotate, 2], speed, θ, ϕ, {0, 0, 0}, {0, 0, 0}, time]
    The user can also rotate the cube and get the expected results.

    Apparent shape of a fast moving Arbitrary Function :

    g[x_, y_] := (f[5*(x + ((initialx + finalx)/10) ), 5*(y + ((initialy + finaly)/10) )])/5
    One interesting shape is the apparent view of an incredibly fast moving snake (sine wave):
    The user can enter any function and get the desired shape!

    Conclusion and Future Goals:

    This project was quite challenging and provided me with new insights about Special Relativity. Although the Lorentz transformation is pretty straightforward, the Poincare' transformation for a generalised version allowed me to create complex relativistic transformations for every possible configuration. Incorporating time delay and transforming arbitrary functions were difficult mathematical tasks, but they paved the way to create some beautiful visualisations.
    My future goal is to incorporate red-shift and blue-shift into the project, followed by using differential geometry to study the mathematical behaviour of curves created in these objects. As an extension of this problem, I would like to simulate relativistic transformations for complex objects near a black hole in curvilinear coordinates. This would involve taking geodesic paths of light and taking into account tidal forces of a gravitational field!

    Acknowledgements:

    I would like to thank my mentor Maegan Jennings for her extensive support in this project. I would also like to thank the Wolfram High School Summer Camp for this amazing opportunity!