|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://www.stsci.edu/~sontag/spicedocs/cspice/eul2xf_c.html
Дата изменения: Sat Dec 17 06:09:02 2005 Дата индексирования: Mon Apr 11 00:01:59 2016 Кодировка: Поисковые слова: http www.badastronomy.com bad tv foxapollo.html |
This routine computes a state transformation from an Euler angle factorization of a rotation and the derivatives of those Euler angles.
ROTATION
VARIABLE I/O DESCRIPTION -------- --- -------------------------------------------------- eulang I An array of Euler angles and their derivatives. axisa I Axis A of the Euler angle factorization. axisb I Axis B of the Euler angle factorization. axisc I Axis C of the Euler angle factorization. xform O A state transformation matrix.
eulang is the set of Euler angles corresponding to the
specified factorization.
If we represent r as shown here:
r = [ alpha ] [ beta ] [ gamma ]
axisa axisb axisc
then
eulang[0] = alpha
eulang[1] = beta
eulang[2] = gamma
eulang[3] = dalpha/dt
eulang[4] = dbeta/dt
eulang[5] = dgamma/dt
axisa are the axes desired for the factorization of r.
axisb All must be in the range from 1 to 3. Moreover
axisc it must be the case that axisa and axisb are distinct
and that axisb and axisc are distinct.
Every rotation matrix can be represented as a product
of three rotation matrices about the principal axes
of a reference frame.
r = [ alpha ] [ beta ] [ gamma ]
axisa axisb axisc
The value 1 corresponds to the X axis.
The value 2 corresponds to the Y axis.
The value 3 corresponds to the Z axis.
xform is the state transformation corresponding r and dr/dt
as described above. Pictorially,
[ | ]
| r | 0 |
| | |
|-------+--------|
| | |
| dr/dt | r |
[ | ]
where r is a rotation that varies with respect to time
and dr/dt is its time derivative.
None.
This function is intended to provide an inverse for the function xf2eul_c. A word about notation: the symbol [ x ] i indicates a coordinate system rotation of x radians about the ith coordinate axis. To be specific, the symbol [ x ] 1 indicates a coordinate system rotation of x radians about the first, or x-, axis; the corresponding matrix is +- -+ | 1 0 0 | | | | 0 cos(x) sin(x) |. | | | 0 -sin(x) cos(x) | +- -+ Remember, this is a COORDINATE SYSTEM rotation by x radians; this matrix, when applied to a vector, rotates the vector by -x radians, not x radians. Applying the matrix to a vector yields the vector's representation relative to the rotated coordinate system. The analogous rotation about the second, or y-, axis is represented by [ x ] 2 which symbolizes the matrix +- -+ | cos(x) 0 -sin(x) | | | | 0 1 0 |, | | | sin(x) 0 cos(x) | +- -+ and the analogous rotation about the third, or z-, axis is represented by [ x ] 3 which symbolizes the matrix +- -+ | cos(x) sin(x) 0 | | | | -sin(x) cos(x) 0 |. | | | 0 0 1 | +- -+ The input matrix is assumed to be the product of three rotation matrices, each one of the form +- -+ | 1 0 0 | | | | 0 cos(r) sin(r) | (rotation of r radians about the | | x-axis), | 0 -sin(r) cos(r) | +- -+ +- -+ | cos(s) 0 -sin(s) | | | | 0 1 0 | (rotation of s radians about the | | y-axis), | sin(s) 0 cos(s) | +- -+ or +- -+ | cos(t) sin(t) 0 | | | | -sin(t) cos(t) 0 | (rotation of t radians about the | | z-axis), | 0 0 1 | +- -+ where the second rotation axis is not equal to the first or third. Any rotation matrix can be factored as a sequence of three such rotations, provided that this last criterion is met. This routine is related to the routine eul2xf_c which produces a state transformation from an input set of axes, Euler angles and derivatives. The two function calls shown here will not change xform except for round off errors. xf2eul_c ( xform, axisa, axisb, axisc, eulang, &unique ); eul2xf_c ( eulang, axisa, axisb, axisc, xform ); On the other hand the two calls eul2xf_c ( eulang, axisa, axisb, axisc, xform ); xf2eul_c ( xform, axisa, axisb, axisc, eulang, &unique ); will leave eulang unchanged only if the components of eulang are in the range produced by xf2eul_c and the Euler representation of the rotation component of xform is unique within that range.
Suppose you have a set of Euler angles and their derivatives
for a 3 1 3 rotation, and that you would like to determine
the equivalent angles and derivatives for a 1 2 3 rotation.
r = [alpha] [beta] [gamma]
3 1 3
r = [roll] [pitch] [yaw]
1 2 3
The following code fragment will perform the desired computation.
abgang[0] = alpha;
abgang[1] = beta;
abgang[2] = gamma;
abgang[3] = dalpha;
abgang[4] = dbeta;
abgang[5] = dgamma;
eul2xf_c ( abgang, 3, 1, 3, xform );
xf2eul_c ( xform, 1, 2, 3, rpyang );
roll = rpyang[0];
pitch = rpyang[1];
yaw = rpyang[2];
droll = rpyang[3];
dpitch = rpyang[4];
dyaw = rpyang[5];
None.
All erroneous inputs are diagnosed by routines in the call
tree to this routine. These include
1) If any of axisa, axisb, or axisc do not have values in
{ 1, 2, 3 },
then the error SPICE(INPUTOUTOFRANGE) is signaled.
None.
N.J. Bachman (JPL) W.L. Taber (JPL)
None.
-CSPICE Version 2.0.0, 31-OCT-2005 (NJB)
Restriction that second axis must differ from the first
and third was removed.
-CSPICE Version 1.0.1, 03-JUN-2003 (EDW)
Correct typo in Procedure line.
-CSPICE Version 1.0.0, 18-MAY-1999 (WLT) (NJB)
State transformation from Euler angles and derivatives