Projecting a Particle in 3D Space
QUESTION: How can I project and display a particle trajectory in 3D space?
ANSWER: A line in 3D space is easily displayed in IDL with the PLOTS command. The trick here is setting up the 3D space for the projection. Here is one way to do it.
First, construct a simulated particle path.
time = Findgen(200) x = Sin(time/2.5) / Exp(time/100) ; Damped Sine Curve y = Sin(time/2.5) / Exp(time/100) ; Damped Sine Curve z = Sin(time/5.0 * !DtoR) ; Function of the time x = Reverse(x) ; Reverse the x vector minx = Min(x, Max=maxx) miny = Min(y, Max=maxy)
Next, open a window and set up the 3D space drawn with a set of axes. This can be done in several ways, but I like to use the SURFACE command with the NODATA keyword. Be sure to use the SAVE keyword, which loads the 3D transformation matrix created by the SURFACE command into the !P.T system variable, like this:
Window, /Free, XSize=450, YSize=450 TvLCT, 255, 255, 0, 1 ; Set up the 3D space. Draw axes for the plot. ; Save the 3D transformation in !P.T. Surface, Dist(5), XRange=[minx, maxx], YRange=[miny, maxy], $ ZRange=[0,1], XStyle=1, YStyle=1, ZStyle=1, /NoData, /Save
To plot the trajectory, use the PLOTS command. Be sure to set the T3D keyword, which indicates that the 3D transformation matrix loaded into the !P.T system variable by the SURFACE command is used to project the line onto the 2D surface of the display.
PlotS, x, y, z, /T3D, Color=1
The result is illustrated in the figure below.
Animating the Trajectory
This particle trajectory is easily animated with the XInterAnimate animation tool.
XInterAnimate, Set=[250,250,50], /Showload FOR j=1,49 DO BEGIN Surface, Dist(5), XRange=[minx, maxx], YRange=[miny, maxy], $ ZRange=[0,1], XStyle=1, YStyle=1, ZStyle=1, /NoData, /Save PlotS, x((j-1)*4:j*4), y((j-1)*4:j*4), z((j-1)*4:j*4), /T3D, Color = 1 XInterAnimate, Frame=j, Window=!D.Window ENDFOR XInterAnimate
Click here to download the IDL code used in this example.
Last Updated 11 April 1997