rotvec |
Table of contents
ProcedureROTVEC ( Transform a vector via a rotation ) SUBROUTINE ROTVEC ( V1, ANGLE, IAXIS, VOUT ) AbstractTransform a vector to a new reference frame rotated by ANGLE radians about axis IAXIS. This transformation rotates V1 by -ANGLE radians about the specified axis. Required_ReadingROTATION KeywordsROTATION VECTOR DeclarationsIMPLICIT NONE DOUBLE PRECISION V1 ( 3 ) DOUBLE PRECISION ANGLE INTEGER IAXIS DOUBLE PRECISION VOUT ( 3 ) Brief_I/OVARIABLE I/O DESCRIPTION -------- --- -------------------------------------------------- V1 I Vector whose coordinate system is to be rotated. ANGLE I Angle of rotation in radians. IAXIS I Axis of rotation (X=1, Y=2, Z=3). VOUT O Resulting vector expressed in the new frame. Detailed_InputV1 is a vector (typically representing a vector fixed in inertial space) which is to be expressed in another reference frame. The vector remains fixed but the reference frame changes. ANGLE is an angle given in radians, through which the rotation is performed. IAXIS is the index of the axis of rotation. The X, Y, and Z axes have indices 1, 2 and 3 respectively. Detailed_OutputVOUT is the vector expressed in the new reference frame specified by the angle of rotation and axis. If M = [ANGLE] IAXIS represents the rotation matrix described by the ANGLE and IAXIS, (refer to the routine ROTATE) then VOUT = M * V1 = [ANGLE] * V1 IAXIS ParametersNone. ExceptionsError free. 1) If the IAXIS index is not in the range 1 to 3, it will be treated the same as that integer 1, 2, or 3 that is congruent to it mod 3. FilesNone. ParticularsA rotation about the first, i.e. X-axis, is described by .- -. | 1 0 0 | | 0 cos(theta) sin(theta) | | 0 -sin(theta) cos(theta) | `- -' A rotation about the second, i.e. Y-axis, is described by .- -. | cos(theta) 0 -sin(theta) | | 0 1 0 | | sin(theta) 1 cos(theta) | `- -' A rotation about the third, i.e. Z-axis, is described by .- -. | cos(theta) sin(theta) 0 | | -sin(theta) cos(theta) 0 | | 0 0 1 | `- -' ROTVEC decides which form is appropriate according to the value of IAXIS and applies the rotation to the input vector. ExamplesThe numerical results shown for this example may differ across platforms. The results depend on the SPICE kernels used as input, the compiler and supporting libraries, and the machine specific arithmetic implementation. 1) Apply a rotation of -45.D0 degrees about the +Z axis to a 3 dimensional vector. Example code begins here. PROGRAM ROTVEC_EX1 IMPLICIT NONE C C SPICELIB functions C DOUBLE PRECISION PI C C Local variables. C DOUBLE PRECISION ANGLE DOUBLE PRECISION V1 ( 3 ) DOUBLE PRECISION VOUT ( 3 ) INTEGER I INTEGER IAXIS C C Input values. C DATA V1 / 1.414D0, 0.D0, 0.D0 / ANGLE = PI( )/4 IAXIS = 3 C C Rotate V1 by ANGLE radians about IAXIS C CALL ROTVEC (V1, ANGLE, IAXIS, VOUT) WRITE(*,'(A,3F10.3)') 'Input vector :', . ( V1(I), I=1,3 ) WRITE(*,'(A,3F10.3)') 'Rotated vector:', . ( VOUT(I), I=1,3 ) END When this program was executed on a Mac/Intel/gfortran/64-bit platform, the output was: Input vector : 1.414 0.000 0.000 Rotated vector: 1.000 -1.000 0.000 RestrictionsNone. Literature_ReferencesNone. Author_and_InstitutionN.J. Bachman (JPL) J. Diaz del Rio (ODC Space) W.M. Owen (JPL) W.L. Taber (JPL) VersionSPICELIB Version 1.1.0, 06-JUL-2021 (JDR) Added IMPLICIT NONE statement. Edited the header to comply with NAIF standard. Created complete code example from existing code fragments. Changed "coordinate system" to "reference frame" to follow NAIF conventions. Added ROTATION required reading. SPICELIB Version 1.0.3, 23-APR-2010 (NJB) Header correction: assertions that the output can overwrite the input have been removed. SPICELIB Version 1.0.2, 04-OCT-1999 (NJB) Procedure line and abstract were changed to dispel the impression that the input vector is rotated by +ANGLE radians about the specified axis. SPICELIB Version 1.0.1, 10-MAR-1992 (WLT) Comment section for permuted index source lines was added following the header. SPICELIB Version 1.0.0, 31-JAN-1990 (WMO) (WLT) |
Fri Dec 31 18:36:44 2021