AnglePath3D[{{α1,β1,γ1},{α2,β2,γ2},…}]
gives the list of 3D coordinates of a path of an object that starts at {0,0,0}, then takes a series of steps of unit length, each in the direction of the
axis obtained after successive rotation of the object by the Euler angles αi, βi, γi.
AnglePath3D[{{α1,β1},{α2,β2},…}]
assumes the Euler angles γi to be 0.
AnglePath3D[{mat1,mat2,…}]
takes the successive rotations to be specified by the 3D rotation matrices mati.
AnglePath3D[{{r1,rot1},{r2,rot2},…}]
takes successive steps of length ri with Euler angles or rotation matrices specified by roti.
AnglePath3D[{x0,y0,z0},steps]
starts at the point {x0,y0,z0}.
AnglePath3D[{rot0},steps]
starts in the
axis direction specified by rotating the object according to Euler angles or rotation matrix rot0.
AnglePath3D[{{x0,y0,z0},rot0},steps]
starts at point {x0,y0,z0} with the
axis direction specified by rot0.
AnglePath3D[init,steps,form]
returns at each step the data of the form specified by form.
AnglePath3D
AnglePath3D[{{α1,β1,γ1},{α2,β2,γ2},…}]
gives the list of 3D coordinates of a path of an object that starts at {0,0,0}, then takes a series of steps of unit length, each in the direction of the
axis obtained after successive rotation of the object by the Euler angles αi, βi, γi.
AnglePath3D[{{α1,β1},{α2,β2},…}]
assumes the Euler angles γi to be 0.
AnglePath3D[{mat1,mat2,…}]
takes the successive rotations to be specified by the 3D rotation matrices mati.
AnglePath3D[{{r1,rot1},{r2,rot2},…}]
takes successive steps of length ri with Euler angles or rotation matrices specified by roti.
AnglePath3D[{x0,y0,z0},steps]
starts at the point {x0,y0,z0}.
AnglePath3D[{rot0},steps]
starts in the
axis direction specified by rotating the object according to Euler angles or rotation matrix rot0.
AnglePath3D[{{x0,y0,z0},rot0},steps]
starts at point {x0,y0,z0} with the
axis direction specified by rot0.
AnglePath3D[init,steps,form]
returns at each step the data of the form specified by form.
Details and Options
- The successive directions taken in AnglePath3D are defined by the
axes of successive local frames, which can be thought of as defining the orientation of a 3D object. - By default, the orientation of the initial frame is aligned with the coordinate axes.
- At each step, the local frame is rotated, then the path advances by the specified distance along the
axis in the new frame. - A triple of angles {αi,βi,γi} is generally equivalent to the Euler rotation matrix EulerMatrix[{αi,βi,γi},{3,2,1}]. In this convention, αi can be thought of as a longitude angle, βi as a latitude angle and γi as a rotation angle about the displacement axis.
- The lengths of the steps can be specified with {{r1,rot1},{r2,rot2},…}, or equivalently with {{r1,r2,…},{rot1,rot2,…}}.
- For a step of length ri with direction specified by mati, the next position pi={xi,yi,zi} is obtained by pi=pi-1+fi.{ri,0,0}, with the frame rotation matrix fi given by fi=fi-1.mati and f0=mat0.
- AnglePath3D[steps,form] is equivalent to AnglePath3D[{0,0,0},steps,form].
- Possible choices for form in AnglePath3D[…,form] include:
-
"Position" Cartesian coordinates {xi,yi,zi} (default) "FrameMatrix" rotation matrix of the frame fi with respect to f0 "EulerMatrix" rotation matrix of the frame fi with respect to fi - 1 "FrameAngles" EulerAngles[fi,{3,2,1}] "EulerAngles" {αi,βi,γi} "Translation" TranslationTransform[{xi,yi,zi}] "Rotation" AffineTransform[fi] "RotationTranslation" AffineTransform[{fi,{xi,yi,zi}}] {form1,form2,…} a list of forms - The arguments init and steps can be symbolic. They can also be Quantity objects.
- AnglePath3D has the option WorkingPrecision, which determines the precision of numbers generated.
- With the default setting WorkingPrecisionAutomatic, exact numbers will be generated for exact input only for fairly short paths; for longer paths, machine precision will be used.
Examples
open all close allBasic Examples (6)
Starting at {0,0,0} along the
axis, move several unit steps, rotating by 90° with respect to the local
axis at each step:
AnglePath3D[{{90°, 0, 0}, {90°, 0, 0}, {90°, 0, 0}}]Move several unit steps, rotating the local frame by Euler angles 30°, 30° and 90° with respect to the local axes
,
and
:
AnglePath3D[{{30°, 30°, 90°}, {30°, 30°, 90°}, {30°, 30°, 90°}}]Move with steps of different lengths, rotating the local frame by Euler angles 90° with respect to the local axes
and
:
AnglePath3D[{{1, {90°, 90°}}, {2, {90°, 90°}}, {3, {90°, 90°}}}]Advance 20 steps, always rotating the local frame by Euler angles 100° with respect to all axes:
Graphics3D[Tube[AnglePath3D[ConstantArray[{100.°, 100.°, 100.°}, 20]]], Boxed -> False]pos = AnglePath3D[ConstantArray[N@{0, -π / 12, π / 25}, 100]];Graphics3D[Arrow[pos]]Generate the transformation functions of a path:
transformations = AnglePath3D[{{7, {π / 2, 0}}, {9, {0, π / 2}}}, "RotationTranslation"]triceratops = ExampleData[{"Geometry3D", "Triceratops"}, "GraphicsComplex"];
Graphics3D[GeometricTransformation[triceratops, transformations]]AnglePath3D[{{0, 0, Subscript[γ, 1]}, {0, Subscript[β, 2], 0}, {Subscript[α, 3], 0, 0}}]Scope (22)
Steps Specification (7)
Generate a path of unit steps with triples of Euler angles, starting at position {0,0,0} in the direction of the
axis:
AnglePath3D[{{90°, 0, 30°}, {60°, -120°, 0}, {0, 180°, -45°}}]Generate a path of unit steps with pairs of Euler angles:
AnglePath3D[{{π / 3, 0}, {π / 2, -2π / 3}, {0, π}}]AnglePath3D[{{α1,β1},{α2,β2},…}] assumes the third Euler angles to be 0:
path1 = AnglePath3D[{{Subscript[α, 1], Subscript[β, 1]}, {Subscript[α, 2], Subscript[β, 2]}, {Subscript[α, 3], Subscript[β, 3]}}];
path2 = AnglePath3D[{{Subscript[α, 1], Subscript[β, 1], 0}, {Subscript[α, 2], Subscript[β, 2], 0}, {Subscript[α, 3], Subscript[β, 3], 0}}];path1 === path2Specify the lengths of the steps:
lengths = {2, 5, 7};
angles = {{0, π / 2, -5π / 6}, {3π / 2, 0, π / 3}, {0, -π / 3, 0}};AnglePath3D[{lengths, angles}]The lengths and directions of the steps can be given jointly or separately:
path1 = AnglePath3D[{{Subscript[r, 1], {Subscript[α, 1], Subscript[β, 1], Subscript[γ, 1]}}, {Subscript[r, 2], {Subscript[α, 2], Subscript[β, 2], Subscript[γ, 2]}}, {Subscript[r, 3], {Subscript[α, 3], Subscript[β, 3], Subscript[γ, 3]}}}];
path2 = AnglePath3D[{{Subscript[r, 1], Subscript[r, 2], Subscript[r, 3]}, {{Subscript[α, 1], Subscript[β, 1], Subscript[γ, 1]}, {Subscript[α, 2], Subscript[β, 2], Subscript[γ, 2]}, {Subscript[α, 3], Subscript[β, 3], Subscript[γ, 3]}}}];path1 === path2Use three-dimensional rotation matrices instead of Euler angles:
mat1 = {{1 / 2, -Sqrt[3] / 2, 0}, {Sqrt[3] / 2, 1 / 2, 0}, {0, 0, 1}};
mat2 = {{0, -1, 0}, {-1 / 2, 0, -Sqrt[3] / 2}, {Sqrt[3] / 2, 0, -1 / 2}};AnglePath3D[{mat1, mat2}]Use Quantity objects in input:
lengths = Quantity[{2, 5, 7}, "Meters"];
angles = Quantity[{{4.6, 2.7}, {0.4, 3.2}, {1.5, 8.6}}, "Radians"];AnglePath3D[{lengths, angles}]Path Initialization (7)
Generate a path starting at a specific position:
steps = {{90°, 0, 30°}, {60°, -120°, 0}, {0, 180°, -45°}};
p0 = {5, 15, 10};AnglePath3D[p0, steps]Choose the orientation of the initial frame by giving a triple of Euler angles:
steps = {{90°, 0, 30°}, {60°, -120°, 0}, {0, 180°, -45°}};
ang0 = {π / 6, 0, π};AnglePath3D[{ang0}, steps]Specify the initial orientation with a pair of Euler angles:
steps = {{90°, 0, 30°}, {60°, -120°, 0}, {0, 180°, -45°}};
ang0 = {-π / 3, π / 2};AnglePath3D[{ang0}, steps]Specify the initial orientation with a three-dimensional rotation matrix:
steps = {{90°, 0, 30°}, {60°, -120°, 0}, {0, 180°, -45°}};
mat0 = {{0, Sqrt[3] / 2, 1 / 2}, {0, 1 / 2, -Sqrt[3] / 2}, {-1, 0, 0}};AnglePath3D[{mat0}, steps]Generate a path where both initial position and initial orientation are specified:
steps = {{90°, 0, 30°}, {60°, -120°, 0}, {0, 180°, -45°}};
p0 = {5, 15, 10};
ang0 = {π / 6, 0, π};AnglePath3D[{p0, ang0}, steps]The orientation of the initial frame can be alternatively specified at the first step:
path1 = AnglePath3D[
{{x, y, z}, {Subscript[α, 0], Subscript[β, 0], Subscript[γ, 0]}}, {{Subscript[r, 1], Subscript[r, 2]}, {{Subscript[α, 1], Subscript[β, 1], Subscript[γ, 1]}, {Subscript[α, 2], Subscript[β, 2], Subscript[γ, 2]}}}
];path2 = AnglePath3D[
{x, y, z}, {{0, Subscript[r, 1], Subscript[r, 2]}, {{Subscript[α, 0], Subscript[β, 0], Subscript[γ, 0]}, {Subscript[α, 1], Subscript[β, 1], Subscript[γ, 1]}, {Subscript[α, 2], Subscript[β, 2], Subscript[γ, 2]}}}
];These are two equivalent paths:
path1 === Rest@path2Use Quantity objects in input:
initpos = Quantity[{2, 4, 3}, "Meters"];
lengths = Quantity[{2, 5, 7}, "Meters"];
angles = Quantity[{{4.6, 2.7}, {0.4, 3.2}, {1.5, 8.6}}, "Radians"];AnglePath3D[initpos, {lengths, angles}]Forms of Data (8)
By default, AnglePath3D returns the position of the point reached at each step:
rots = {{Subscript[α, 1], Subscript[β, 1], Subscript[γ, 1]}, {Subscript[α, 2], Subscript[β, 2], Subscript[γ, 2]}, {Subscript[α, 3], Subscript[β, 3], Subscript[γ, 3]}};pos1 = AnglePath3D[rots];
pos2 = AnglePath3D[rots, "Position"];pos1 === pos2Show the same equivalence starting from an arbitrary point {a,b,c}:
pos1 = AnglePath3D[{a, b, c}, rots];
pos2 = AnglePath3D[{a, b, c}, rots, "Position"];pos1 === pos2Compute the orientation of each local frame with respect to the previous local frame:
AnglePath3D[{{π / 3, 0}, {π / 2, -2π / 3}}, "EulerMatrix"];Map[MatrixForm, %]Compute the orientation of each local frame with respect to the global frame:
AnglePath3D[{{π / 3, 0}, {π / 2, -2π / 3}}, "FrameMatrix"];Map[MatrixForm, %]Compute the Euler angles determining the orientation of each local frame in the global frame:
AnglePath3D[{{π / 3, 0}, {π / 2, -2π / 3}}, "FrameAngles"]Generate translation transformations from the initial position:
translations = AnglePath3D[{{4, {π / 2, 0}}, {8, {0, -π / 2}}}, "Translation"]ellipsoid = Ellipsoid[{0, 0, 0}, {1, 2, 3}];
Graphics3D[GeometricTransformation[ellipsoid, translations]]Generate rotation transformations with respect to the initial frame:
rotations = AnglePath3D[{{4, {π / 2, 0}}, {8, {0, -π / 2}}}, "Rotation"]ellipsoid = Ellipsoid[{0, 0, 0}, {1, 2, 3}];
Graphics3D[GeometricTransformation[ellipsoid, rotations]]Generate rotation-translation transformations from the initial step:
transformations = AnglePath3D[{{4, {π / 2, 0}}, {8, {0, -π / 2}}}, "RotationTranslation"]ellipsoid = Ellipsoid[{0, 0, 0}, {1, 2, 3}];
Graphics3D[GeometricTransformation[ellipsoid, transformations]]Produce different forms of data with one AnglePath3D call:
forms = {"EulerMatrix", "Position", "RotationTranslation"};
path = AnglePath3D[{{π / 2, 0}, {0, -π / 2}}, forms];The first elements of the triples are the Euler rotations with respect to the previous frame:
Map[MatrixForm, path[[All, 1]]]The second elements are the positions:
path[[All, 2]]The third elements are the transformations from the initial frame:
path[[All, 3]]Options (1)
WorkingPrecision (1)
By default, AnglePath3D with exact input gives exact numbers for short paths and machine numbers for long paths:
AnglePath3D[Table[{Pi / 3, 0, 0}, 7]]//LastAnglePath3D[Table[{Pi / 3, 0, 0}, 5004]]//LastSpecify infinite working precision to perform exact, but slower, computations:
AnglePath3D[Table[{Pi / 3, 0, 0}, 5004], WorkingPrecision -> Infinity]//LastUse any specified precision for the computations:
AnglePath3D[Table[{Pi / 3, 0, 0}, 7], WorkingPrecision -> 20]//LastApplications (7)
Path Visualization of a Pointlike Object (5)
Draw a hexagon in the
-
plane:
pos = AnglePath3D[ConstantArray[{0, π / 3, 0}, 6]];Graphics3D[Line[pos],
Axes -> True, AxesLabel -> {"X", "Y", "Z"}, Ticks -> None]Draw an octagon in the
-
plane:
pos = AnglePath3D[{{π / 2, 0, 0}}, ConstantArray[{0, π / 4, 0}, 8]];Graphics3D[Line[pos],
Axes -> True, AxesLabel -> {"X", "Y", "Z"}, Ticks -> None]Visit all vertices of a cube once:
rotα = {π / 2, 0};
rotβ = {0, π / 2};
pos = AnglePath3D[{rotα, rotα, rotα, rotβ, rotβ, rotα, rotα}];edges = Graphics3D[{FaceForm[], EdgeForm[Dotted], Cuboid@@CoordinateBoundingBox[pos]}, Boxed -> False]travel = Graphics3D[{Arrowheads[{{.05, .5}}], Arrow /@ Subsequences[pos, {2}], PointSize[Large], Red, Point[pos]}];Show[edges, travel]Draw a three-dimensional spiral:
r = Rest@Subdivide[70];
angles = ConstantArray[{π / 12, 0, -π / 24}, 70];
pos = AnglePath3D[N@{r, angles}];Graphics3D[Arrow[pos]]Make a random walk where successive steps change direction by at most 20° in any Euler angles:
Graphics3D[Line@AnglePath3D[RandomReal[{-20°, 20°}, {1000, 3}]]]Make a random walk where successive steps change direction by Euler angles between 0 and
:
Graphics3D[Line@AnglePath3D[RandomReal[{0, π}, {10000, 3}]]]Path Visualization of a Rigid Body (2)
Visualize the orientation of a rigid body after successive rotations about a same axis:
shuttle = GeometricTransformation[ExampleData[{"Geometry3D", "SpaceShuttle"}, "GraphicsComplex"], RotationMatrix[π, {0, 0, 1}].ScalingMatrix[{.05, .05, .05}]];Graphics3D[shuttle, Boxed -> False]pathzaxis = AnglePath3D[{{90°, 0, 0}, {90°, 0, 0}, {90°, 0, 0}}, "RotationTranslation"];Graphics3D[GeometricTransformation[shuttle, pathzaxis], Boxed -> False]Generate the position reached at each step at the same time:
path = AnglePath3D[{{90°, 0, 0}, {90°, 0, 0}, {90°, 0, 0}}, {"Position", "RotationTranslation"}];graphics[path_] := Graphics3D[{Dotted, Line[path[[All, 1]]], GeometricTransformation[shuttle, path[[All, 2]]]}, Boxed -> False];graphics[path]pathyaxis = AnglePath3D[{{0, 90°, 0}, {0, 90°, 0}, {0, 90°, 0}}, {"Position", "RotationTranslation"}];graphics[pathyaxis]pathxaxis = AnglePath3D[{{0, 0, 90°}, {0, 0, 90°}, {0, 0, 90°}}, {"Position", "RotationTranslation"}];graphics[pathxaxis]Fly to all vertices of a cube once:
rotα = {π / 2, 0};
rotβ = {0, π / 2};pathA = AnglePath3D[{rotα, rotα, rotα, rotβ, rotβ, rotα, rotα}, {"Position", "RotationTranslation"}];
positions = pathA[[All, 1]];
transformations = pathA[[All, 2]];edges = Graphics3D[{FaceForm[], EdgeForm[Dotted], Cuboid@@CoordinateBoundingBox[positions]}, Boxed -> False];shuttle = GeometricTransformation[ExampleData[{"Geometry3D", "SpaceShuttle"}, "GraphicsComplex"], RotationMatrix[π, {0, 0, 1}].ScalingMatrix[{.03, .03, .03}]];travelA =
Graphics3D[{Arrowheads[{{.03, .5}}], Arrow /@ Subsequences[positions, {2}], GeometricTransformation[shuttle, transformations]}, Boxed -> False];Show[edges, travelA]Follow the same directions but with different orientations:
rotαβ = {π, π / 2};
pathB = AnglePath3D[{rotα, rotα, rotα, rotαβ, -rotβ, -rotα, -rotα}, {"Position", "RotationTranslation"}];positions = pathB[[All, 1]];
transformations = pathB[[All, 2]];travelB = Graphics3D[{Arrowheads[{{.03, .5}}], Arrow /@ Subsequences[positions, {2}], GeometricTransformation[shuttle, transformations]}];Show[edges, travelB]Properties & Relations (7)
AnglePath3D[{{θ1,0,0},{θ2,0,0},…}] returns a path in the
-
plane:
path3D = AnglePath3D[{{Subscript[θ, 1], 0, 0}, {Subscript[θ, 2], 0, 0}}]path3D[[All, 3]]The generated path is equivalent to that of AnglePath[{θ1,θ2,…}]:
Simplify[path3D[[All, {1, 2}]] - AnglePath[{Subscript[θ, 1], Subscript[θ, 2]}]]Paths start at point {0,0,0} by default:
angles = RandomReal[{-Pi, Pi}, {4, 3}]path0 = AnglePath3D[angles, "Position"]Specify an alternative initial point:
path = AnglePath3D[{1, 3, -2}, angles, "Position"]Then all points are shifted by the vector corresponding to the initial point:
path - path0Specifying Euler angles is equivalent to specifying
-
-
Euler matrices:
eulerangles = {{Subscript[α, 1], Subscript[β, 1], Subscript[γ, 1]}, {Subscript[α, 2], Subscript[β, 2], Subscript[γ, 2]}, {Subscript[α, 3], Subscript[β, 3], Subscript[γ, 3]}};
eulermatrices = EulerMatrix[#, {3, 2, 1}]& /@ eulerangles;AnglePath3D[eulerangles] === AnglePath3D[eulermatrices]Specifying initial Euler angles is equivalent to specifying an initial
-
-
Euler matrix:
initialangles = {Subscript[α, 0], Subscript[β, 0], Subscript[γ, 0]};
initialmatrix = EulerMatrix[initialangles, {3, 2, 1}];angles = {{Subscript[α, 1], Subscript[β, 1], Subscript[γ, 1]}, {Subscript[α, 2], Subscript[β, 2], Subscript[γ, 2]}, {Subscript[α, 3], Subscript[β, 3], Subscript[γ, 3]}};AnglePath3D[{initialangles}, angles] === AnglePath3D[{initialmatrix}, angles]Take a collection of random rotation matrices and compute the corresponding angle path:
rots = EulerMatrix /@ RandomReal[{-Pi, Pi}, {4, 3}]path = AnglePath3D[{0, 0, 0}, rots]This formula computes the rotations that produce the same path but traversed in opposite order:
irots = Prepend[Reverse[Inverse /@ Rest[rots]], -Fold[Dot, rots]]ipath = AnglePath3D[Last[path], irots]Check that the paths are identical if one of them is reversed, except for numerical error:
Reverse[path] - ipath//ChopGlobal frame rotations can be obtained as multiplications of all previous relative Euler rotations:
angles = N@{{π / 3, 0}, {π / 2, -π / 6}};framematrices = AnglePath3D[angles, "FrameMatrix"];
Map[MatrixForm, %]framematrices == FoldList[#1.#2&, AnglePath3D[angles, "EulerMatrix"]]Compute the positions for a path with the following inputs:
p0 = {x0, y0, z0};
angles = {{Subscript[α, 1], Subscript[β, 1], Subscript[γ, 1]}, {Subscript[α, 2], Subscript[β, 2], Subscript[γ, 2]}, {Subscript[α, 3], Subscript[β, 3], Subscript[γ, 3]}};positions = AnglePath3D[p0, angles];An alternative way to compute these positions is using the form "FrameMatrix":
framematrices = AnglePath3D[angles, "FrameMatrix"];positions == FoldList[#1 + #2.{1, 0, 0}&, p0, Rest[framematrices]]Interactive Examples (1)
Interactively chart a path for the space shuttle:
DynamicModule[{shuttle, lengths = {}, angles = {}, path, points},
shuttle = GeometricTransformation[ExampleData[{"Geometry3D", "SpaceShuttle"}, "GraphicsComplex"], RotationMatrix[π, {0, 0, 1}].ScalingMatrix[{.1, .1, .1}]];
Manipulate[
path = AnglePath3D[{lengths, angles}, {"Position", "FrameMatrix"}];
points = path[[All, 1]];
Graphics3D[{
Line[points], GeometricTransformation[shuttle, AffineTransform[{path[[-1, 2]].EulerMatrix[{α, β, γ}, {3, 2, 1}], Last[points]}]],
Point[points], White, Point[{{-3, -3, -3}, {3, 3, 3}}]},
Axes -> True,
PlotRange -> All,
ImageSize -> {420, 420}
],
Row[{Control[{{r, 1}, 0, 10}], Spacer[24], Control[{{fixr, True, "Fixed"}, {True, False}}]}],
Row[{Control[{{α, 0}, -Pi, Pi}], Spacer[20], Control[{{fixα, False, "Fixed"}, {True, False}}]}],
Row[{Control[{{β, 0}, -Pi / 2, Pi / 2}], Spacer[21], Control[{{fixβ, False, "Fixed"}, {True, False}}]}],
Row[{Control[{{γ, 0}, -Pi, Pi}], Spacer[21], Control[{{fixγ, False, "Fixed"}, {True, False}}]}],
Button["Next step", AppendTo[lengths, r];AppendTo[angles, {α, β, γ}];{If[Not[fixr], r = 1.], If[Not[fixα], α = 0.], If[Not[fixβ], β = 0.], If[Not[fixγ], γ = 0.]}],
Button["Restart", {lengths = {}, angles = {}, r = 1., α = 0., β = 0., γ = 0.}]
]
]Neat Examples (3)
Draw a space curve with incrementally increasing
and constant
:
alphas = Range[0, 20, .001];
betas = ConstantArray[0.01, Length[alphas]];Graphics3D[Line@AnglePath3D[Transpose[{alphas, betas}]], Boxed -> False]Draw a space curve with incrementally increasing
and constant
and
:
alphas = Range[0, 20, .001];
betas = ConstantArray[0.01, Length[alphas]];
gammas = ConstantArray[0.01, Length[alphas]];Graphics3D[Line@AnglePath3D[Transpose[{alphas, betas, gammas}]], Boxed -> False]Animate a shuttle looping in the
-
plane:
DynamicModule[{shuttle, path},
shuttle = GeometricTransformation[
ExampleData[{"Geometry3D", "SpaceShuttle"}, "GraphicsComplex"],
RotationMatrix[π, {0, 0, 1}]];
path = AnglePath3D[N@ConstantArray[{0, -π / 100}, 200], {"Position", "RotationTranslation"}];
Animate[
Graphics3D[{
Line[path[[All, 1]]],
GeometricTransformation[shuttle, path[[i, 2]]]
},
ImageSize -> 350,
Boxed -> False,
PlotRange -> {{-35, 35}, {-5, 5}, {-5, 65}}
],
{{i, 1, "step"}, 1, Length[path], 1},
AnimationRunning -> False, SaveDefinitions -> True
]
]Related Guides
Text
Wolfram Research (2017), AnglePath3D, Wolfram Language function, https://reference.wolfram.com/language/ref/AnglePath3D.html (updated 2019).
CMS
Wolfram Language. 2017. "AnglePath3D." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2019. https://reference.wolfram.com/language/ref/AnglePath3D.html.
APA
Wolfram Language. (2017). AnglePath3D. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/AnglePath3D.html
BibTeX
@misc{reference.wolfram_2026_anglepath3d, author="Wolfram Research", title="{AnglePath3D}", year="2019", howpublished="\url{https://reference.wolfram.com/language/ref/AnglePath3D.html}", note=[Accessed: 13-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_anglepath3d, organization={Wolfram Research}, title={AnglePath3D}, year={2019}, url={https://reference.wolfram.com/language/ref/AnglePath3D.html}, note=[Accessed: 13-June-2026]}