When a laser sail spacecraft travels at different velocities, the apparent positions and colors of the star field viewed from the spacecraft change. Using equations for Doppler shift and relativistic aberration, I showed how these properties can be calculated and outputted as a three-dimensional visual. Vice versa, given the difference in star colors when the spacecraft is stationary versus in motion, I found the speed of the spacecraft. The different properties of the laser sail also have an effect on the speed, peak acceleration, and kinetic energy; using equations, I showed how these can be maximized.

Introduction

This project explores how star fields appear from a spacecraft traveling at different velocities. Theoretically, a spacecraft propelled by laser sail technology could reach speeds of up to 20% of the speed of light. At these speeds, the apparent positions and colors of stars change due to the Doppler effect and relativistic aberration. In this project, I investigated how these changes occur, as well as how the observed star field can be used as a speedometer to determine the spacecraft’s speed. I also demonstrated how different sail properties, including geometry, thickness, density, and reflectivity, affect the spacecraft’s performance. The objective was to determine how star fields would appear from a spacecraft traveling at relativistic speeds that may be achievable using laser sails. With laser sail propulsion being a potential method for future interstellar travel, this project explores both the engineering considerations and the observational consequences of relativistic spaceflight.

Relativistic Aberration

As the speed of the spacecraft approaches the speed of light, the angle between the spacecraft and the light from the star changes drastically, leading to the special phenomena of relativistic aberration, when objects appear to look either stretched or compressed along the motion of the spacecraft. Thus, when the spacecraft begins to reach near-light speeds, much of the light from the stars in the star field appear concentrated in front of the spacecraft’s path.
​
I determined this angle using the equation:
​tan θ’ = (sinθ) / (γ(cosθ + v/c))
θ’ represents the apparent angle I tried to determine, and the original angle θ can be found using trigonometry. Gamma represents the time dilation factor, v represents the speed, and c is the speed of light.
This function uses the formula for relativistic aberration to return the apparent angle between the spacecraft and the star measured in radians. I used this function to determine the angle and observed location of the star from the spacecraft when going at different speeds.
In[]:=
apparentPosition[c_,v_][{posx_,posy_}]:=N[ArcTan[Sin[ArcTan[posx,posy]]/(Cos[ArcTan[posx,posy]]+(v/c))/(Sqrt[1-(v^2/c^2)])]]
In[]:=
apparentPosition[300000000,100000000][{1.5*10^10,5*10^10}]
Out[]=
1.02236
Using this angle, I computed the apparent coordinate points of the stars at different speeds of light.

Doppler Effect

Using the star data in Mathematica, I found the colors of the stars in the star field if the spacecraft was stationary.
First, I defined a list that uses a random sample of 200 stars from the build in function StarData[].
In[]:=
starList=RandomSample[StarData[],200];
After I determined the wavelength emitted by the star when the spacecraft is stationary, I used the relativistic Doppler wavelength equation to get the wavelength of the light emitted by the star when the spacecraft is moving at different velocities.
This function checks if the wavelengthToColor function is producing the correct color.
In[]:=
colorWavelengthDifference[color_,wavelength_?NumericQ]:=ColorDistance[color,ColorData["VisibleSpectrum"][wavelength]]
This function determines the wavelength that returns the smallest difference for colorWavelengthDifference , effectively getting the wavelength of the star.
In[]:=
colorToWavelength[color_]:=NMinimize[{colorWavelengthDifference[color,wl],380<=wl<=750},wl]/.{_,{_->wl_}}:>wl
After I determined the wavelength emitted by the star when the spacecraft is stationary, I used the relativistic Doppler wavelength equation to get the wavelength of the light emitted by the star when the spacecraft is moving at different velocities.
This function uses the speed of the spacecraft in comparison to the speed of light and the wavelength returned by the previous function colorToWavelength and converts it to the relativistic Doppler wavelength of the star as observed from the spacecraft.
In[]:=
relativisticDopplerWavelength[c_,v_][wavelengthINnm_,{x_,y_}]:=With[{rv={v,0}.Normalize[{x,y}]},wavelengthINnm*(Sqrt[(1+(rv)/c)/(1-((rv)/c))])]
Finally, I converted the shifted wavelength back into a color using the function below in order to get the new apparent color of the star.
This function takes in the new shifted wavelength found from the relativisticDopplerWavelength function above in nanometers and returns the new color of the star when the spacecraft is in motion.
In[]:=
wavelengthToColor[wavelengthINnm_]:=ColorData["VisibleSpectrum"][wavelengthINnm]
For example, the color of a star with a relativistic wavelength of 683 nanometers is a dark maroon color.
In[]:=
wavelengthToColor[683]
Out[]=

Coordinate Points

So how exactly can the the apparent position of the stars when the spacecraft is moving at different velocities be determined? Once Star Data is used to determine the original position of the stars when the spacecraft is stationary, I used trigonometry to find that the new position coordinates change from (x,y,z) to (xcosθ’, ysinθ’, z)/Sqrt(x^2+y^2)
This function takes the original coordinates of the star, the speed of the spacecraft, and the speed of light and returns the coordinates of the new location of the star observed by the spacecraft. It also utilizes the apparentPosition function in order to calculate the new coordinate points.
In[]:=
createCoordinates[c_,velocity_][{x_,y_,z_}]:=With[{angle=apparentPosition[c,velocity][{x,y}]},{x*Cos[angle],y*Sin[angle],z}/Sqrt[x^2+y^2]]
Utilizing the spaceObservation function, I inputted the wavelength, velocity, and coordinates to all of these functions together, and I was clearly able to see the angle in radians, shifted wavelength, and new color.
In[]:=
spaceObservation[wavelengthINnm_,v_,{posx_,posy_}]:=Module[{c=299792458,apparentAngle,shiftedWavelength,color},apparentAngle=apparentPosition[c,v][{posx,posy}];​​shiftedWavelength=relativisticDopplerWavelength[c,v][wavelengthINnm,{posx,posy}];​​color=wavelengthToColor[shiftedWavelength];​​<|"angle in radians"->apparentAngle,"wavelength"->shiftedWavelength,"color"->color|>]
To get the coordinates and colors of the stars in the star field needed to create my visualization function of the star fields at different velocities, I made two functions, getCoordColorPairs and coordColorPairs. This was determined using the built-in AstroPosition function to return the RGB colors for the points in starList.
This function takes in the list starList I defined earlier and returns the coordinates and colors of every star in starList, and defines it to coordColorPairs.
In[]:=
getCoordColorPairs[starList_]:={AstroPosition[#,"ICRS","Cartesian"]["Data"],RGBColor[StarData[#,"Color"][[-1,-1]]]}&/@Select[starList,Not[MissingQ[StarData[#,"Color"]]]&]​​coordColorPairs=getCoordColorPairs[starList];
Combining this function with the spaceObservation function from earlier, depending on the speed of the spacecraft, I returned the angle between the spacecraft and light from star, the shifted wavelength, as well as the apparent color.
In[]:=
spaceObservation[colorToWavelength[#2],0,#1[[{1,2}]]]&@@@coordColorPairs;

Visualization

To visualize the star field from the spacecraft, I began by visualizing what the star field look like when the spacecraft was stationary and centered at the origin. I determined this using a function that creates an interactive graphic of the view from inside the cylindrical ship, showing the colors and positions of the stars. The viewer is inside of a cylindrical spacecraft body that allows for a clear and unobstructed view of the star field outside.
This function utilizes every function I have discussed so far, and returns a 3D interactive image of the star field when the spacecraft is moving at different velocities.
In[]:=
createStarGraphics[velocity_,starInfoList_]:=Module[{c=299792458,positions,colors,wavelengths},{positions,colors}=Transpose[starInfoList];​​positions=createCoordinates[c,velocity]/@positions;​​wavelengths=colorToWavelength/@colors;​​wavelengths=MapThread[relativisticDopplerWavelength[c,velocity],{wavelengths,positions[[All,{1,2}]]}];​​colors=ColorData["VisibleSpectrum"]/@wavelengths;​​Graphics3D[Append[MapThread[{#1,Point[#2]}&,{colors,positions}],{Opacity[0.1],Cylinder[]}],ViewPoint->{3,-3,2},ViewVector->{{0,0,0},{0,0,1}},ViewAngle->Pi/3,Background->Black]]
This generates the graphic for when the speed of the spacecraft is zero.
In[]:=
createStarGraphics[0,coordColorPairs]
Out[]=
It can be observed that there are different star fields when the speed of the spacecraft reaches different fractions of the speed of light, which is 299,792,458 m/s. Due to relativistic aberration, the light from the stars bend toward the front of the spacecraft as the spacecraft moves forward, causing them to appear clustered around the front. As the spacecraft gets closer to the stars, blue shift occurs due to the Doppler effect on light. This means that the apparent color of the stars in front of the spacecraft will shift to be more blue, while the stars behind the spacecraft become more red. This difference is especially noticeable between the stationary visual and when the speed of the spacecraft reaches 0.2 times the speed of light. Using laser sails that utilize the light from the sun and light from the laser can allow the spacecraft to reach speeds up to 0.2 times the speed of light, which is faster than other propulsion methods. The graphics below demonstrate what the star fields would look like when travelling at 0.05, 0.1, 0.15, and 0.2 times the speed of light.
At 0.05 times the speed of light, the speed of the spacecraft reaches 14,989,622.9 m/s:
In[]:=
createStarGraphics[15000000,coordColorPairs]
Out[]=
At 0.1 times the speed of light:
In[]:=
createStarGraphics[30000000,coordColorPairs]
Out[]=
At 0.15 times the speed of light:
At 0.2 times the speed of light:

Using Star Fields as a Speedometer

If the speed of the spacecraft is unknown but the image of the star field is known, the speed of the spacecraft can be found by comparing the colors of the stars in the star field to those of the stationary star field. I achieved this by reversing the Doppler Effect functions I wrote earlier.
The following function applies the relativistic Doppler effect to the wavelength of each star depending on the velocity of the spacecraft, and then updates the star field with the observed colors found from the shifted wavelengths.
The function returns the original positions and colors of the star field when the spacecraft is stationary.
The movingStarField function is used in comparison with the original star field in order to determine the speed. While it is set at 0.05 right now, it can be changed to either 0.1, 0.15, or 0.2 to match the star fields above.
This function determines the speed given the moving star field by reversing the Doppler functions I used for the star fields.

Laser Sail Propulsion

What exactly are laser sail spacecrafts? The more commonly known spacecraft, a solar sail spacecraft, is characterized by large reflective sails that take in the light form the Sun and uses it to propel the spacecraft forward. Although the photons that make up light are massless, they have momentum and bounce of the reflective solar sails. As they hit the sails, they transfer their momentum and the spacecraft is pushed forward , changing the speed of the sail. This allows the spacecraft to keep accelerating as long light is pushing on it. This light, from the sun, can push the spacecraft the entire trip, allowing the spacecraft to reach speeds that were not possible with technology before. Laser Sail Propulsion means laser photons propel the spacecraft forward in addition to solar photons, increasing the acceleration and speed of the spacecraft. Laser propulsion would possibly make extrasolar travelling possible, although there are still several limitations.
For this section, I used the equations calculated by Professor Lubin at UCSB’s astrophysics department. Using AI, I extracted the formulas from his UC Santa Barbara Laser Propulsion website, and turned them in functions in the Wolfram language.
Define the speed of light, the mass of the payload in kilograms, the power of the laser in watts, the size of the array in meters, the wavelength in meters, and the circular diffraction constant in meters.
For my inputs, I first defined a geometry constant that I could use anytime the sail area is needed. The shapes of the sail include a square, circle, and sphere.
Next, the equation below finds the light efficiency using the formula : 2R+(1−R)α, assuming that absorption is one. Light efficiency determines how effective the sail is at converting the light from the laser into forward momentum to propel the spacecraft. Since light is the only thing pushing the spacecraft forward, light efficiency is a critical component in a laser sail.
My function takes in reflection and absorption as inputs and applies the equation. If the absorption is not inputted, the function automatically assumes it is 1.
The next function determines the diameter of the sail, and takes into account whether or not the sail is optimal. A laser sail has two masses, a payload mass and a sail mass. Payload mass includes the mass of the instruments, spacecraft, etc. The sail mass is the thin sail that the laser pushes on.
The sail mass can be found using the equation M=ξD^2ρh, where ξ is the geometry factor, D is the sail diameter, ρ is the density, and h is the thickness. The follow function utilizes this equation to determine the sail mass.
However, when Optimal Sail is not toggled on, the sail diameter is manually inputted and chosen. When Optimal Sail is toggled on, the calculator ignores the diameter slider and uses the diameter that makes the mass of the sail equal the mass of the payload. I used this to solve for the diameter D, and got the equation D = Sqrt(mass of payload / ξρh), which I implemented into my function.
The function below determines the diameter of the sail depending on whether or not Optimal Sail is toggled on. If Optimal Sail is toggled on, it uses the equation, but if not, it just outputs the diameter the user inputs.
This next function determines the mass of the sail using the equation above.
Peak acceleration occurs right after the laser turns on, and is essentially the initial acceleration. The force from the laser can be found with the equation F=ηP​/c, where η is the light efficiency, P is laser power, and c is the speed of light. This force stays constant as long as the sail is completely illuminated, and the mass of the spacecraft and laser power stay constant.
​
Newton’s second law states that F=ma and F=ηP​/c, so I derived the equation for the peak acceleration as a=ηP​/mc. The acceleration does not stay at this value because the laser beam diffracts as the spacecraft travels further and further. When the beam of light from the laser becomes wider than the sail, less of the light hits the sail and therefore less power. This means the force decreases, and therefore the acceleration.
This function calculates the ideal maximum initial acceleration of the spacecraft by multiplying the light efficiency and laser power and dividing that by the total mass multiplied by the speed of light.
I then combined all of these functions into my Laser Sail Calculator that has the option to chose if the spacecraft uses an optimal sail or not, the shape of the spacecraft, the diameter of the scale from 0 to 1 measured in meters, the density of the sail from 0 to 1000 measured in kg/m^3, the thickness of the sail from 0 to 1/1000000 in meters, and the reflectivity or fraction of laser light reflected by the sail, from 0 to 1.
Note that when you toggle on the Optimal Sail option, the diameter on the slider does not affect the laser sail calculator, as explained previously.
This function shows the relationship between the diameter of the sail and the peak acceleration of the spacecraft. Again, there are options to select the shape, the density, the thickness, and reflection of the sail. The graph plots the equation a(d) = ((1+R)P) / (ρA(d)tc) for 0.1 <= d <= 10 meters.
This graph shows the pattern that if the sail has a lower density, lower thickness, and higher reflectivity, the spacecraft accelerates the most.
This function is the same but instead of peak acceleration, the graph shows the relationship between the diameter of the sail and the speed of the spacecraft.
The same relationships that can be seen with acceleration graph above can be seen with the speed graph.
Finally, this function shows the relationship between the diameter of the sail and the kinetic energy measured in Joules.
The kinetic energy graph above shows the positive relationship between reflectivity and kinetic energy, meaning that as reflectivity increases, kinetic energy increases as well.
This function shows a 3-dimensional graph of the speed of the spacecraft in terms of the thickness and diameter of the sail. By varying the density, reflection, and shape of the sail, different graphics will show up.

Conclusion

Future Directions

In the future, I would like to extend my work by incorporating acceleration over time instead of a constant speed. The star field simulation could also use larger data sets in order to more accurately or obviously show the change in colors, as well as red-shift and blue-shift. I also want to add more to the laser sail model by adding more engineering constraints, such as laser beam divergence and showing more relationships outside of just peak acceleration, speed, and kinetic energy. In general, I want to better evaluate the possibility of future laser sail missions and extrasolar travelling.

References

1. 5. 8: Doppler effect for light. (2016, November 2). Physics LibreTexts. https://phys.libretexts.org/Bookshelves/University_Physics/University_Physics_(OpenStax)/University_Physics_III_-_Optics_and_Modern_Physics_(OpenStax)/05%3A__Relativity/5.08%3A_Doppler_Effect_for_Light
2. Relativistic aberration Definition & Example | nuclear-power.com. (2023, May 9). Nuclear Power. https://www.nuclear-power.com/relativistic-aberration/
3. Relativistic doppler effect. (n.d.). Retrieved July 9, 2026, from http://hyperphysics.phy-astr.gsu.edu/hbase/Relativ/reldop3.html#c3
4. Uc santa barbara laser propulsion. (n.d.). Retrieved July 9, 2026, from https://www.deepspace.ucsb.edu/wp-content/uploads/2023/05/Relativistic-Laser-Propulsion-Classical-1D-Standalone.html
5. What is solar sailing? (n.d.). The Planetary Society. Retrieved July 9, 2026, from https://www.planetary.org/articles/what-is-solar-sailing

Acknowledgements

I would like to give a special thank you to my mentor Dan McDonald, for his unwavering commitment, guidance, and insight throughout my project, from helping with functions and equations to graphics or visuals. I would also like to thank my advocate Joseph Brennan for helping me explore different astrophysics topics and familiarizing me with Mathematica. I would also like to thank Megan, Eryn, Rory, and Anne for their guidance on my project choice and for always answering any questions that I have. Finally, I would like to thank Stephen Wolfram for introducing me to the Wolfram Language, suggesting this project, and providing this invaluable experience.

CITE THIS NOTEBOOK

The view from a relativistic laser sail​
by Isabelle Zhen​
Wolfram Community, STAFF PICKS, July 9, 2026
​https://community.wolfram.com/groups/-/m/t/3753840