home *** CD-ROM | disk | FTP | other *** search
-
- (* :Title: Rotations *)
-
- (* :Author: S. Wolfram *)
-
- (* :Summary: Rotations in 2 and 3 dimensions *)
-
- (* :Context: Geometry`Rotations` *)
-
- (* :Package Version: 1.1 *)
-
- (* :Copyright: Copyright 1987,1990 Wolfram Research,Inc. *)
-
- (* :History: *)
-
- (* :Keywords: *)
-
- (* :Source: *)
-
- (* :Warning: *)
-
- (* :Mathematica Version: 2.0 *)
-
- (* :Limitation: *)
-
- (* :Discussion: *)
-
- BeginPackage["Geometry`Rotations`"]
-
- (** Two dimensions **)
-
- RotationMatrix2D::usage =
- "RotationMatrix2D[theta] gives the matrix for rotation by angle theta
- in two dimensions."
-
- Rotate2D::usage =
- "Rotate2D[vec,theta,(pt:{0,0})] rotates the vector vec by angle
- theta about point pt."
-
- (** Three dimensions **)
-
- RotationMatrix3D::usage =
- "RotationMatrix3D[phi,theta,psi] gives the matrix for rotation by the
- specified Euler angles in three dimensions."
-
- Rotate3D::usage =
- "Rotate3D[vec,phi,theta,psi,(pt:{0,0,0})] rotates the vector vec
- by specified Euler angles about point pt."
-
- Begin["`private`"]
-
- RotationMatrix2D[theta_] :=
- {{Cos[theta], Sin[theta]}, {-Sin[theta], Cos[theta]}}
-
- Rotate2D[vec:{_,_}, theta_] :=
- RotationMatrix2D[theta] . vec
-
- Rotate2D[vec:{_,_}, theta_, pt:{_,_}] :=
- pt + RotationMatrix2D[theta] . (vec - pt)
-
- RotationMatrix3D[phi_,theta_,psi_] :=
- { { Cos[psi] Cos[phi] - Cos[theta] Sin[phi] Sin[psi],
- Cos[psi] Sin[phi] + Cos[theta] Cos[phi] Sin[psi],
- Sin[psi] Sin[theta] } ,
- { -Sin[psi] Cos[phi] - Cos[theta] Sin[phi] Cos[psi],
- -Sin[psi] Sin[phi] + Cos[theta] Cos[phi] Cos[psi],
- Cos[psi] Sin[theta] } ,
- { Sin[theta] Sin[phi],
- -Sin[theta] Cos[phi],
- Cos[theta] } }
-
- Rotate3D[vec:{_,_,_}, theta_, phi_, psi_] :=
- RotationMatrix3D[theta,phi,psi] . vec
-
- Rotate3D[vec:{_,_,_}, theta_, phi_, psi_, pt:{_,_,_}] :=
- pt + RotationMatrix3D[theta,phi,psi] . (vec - pt)
-
- End[]
-
- EndPackage[ ]
-
- Null
-