cisst-saw
|
Declaration of vctEulerRotation3. More...
#include <cisstCommon/cmnConstants.h>
#include <cisstVector/vctForwardDeclarations.h>
#include <cisstVector/vctFixedSizeVectorTypes.h>
#include <cisstVector/vctExport.h>
Go to the source code of this file.
Classes | |
class | vctEulerRotation3Base |
class | vctEulerRotation3< _order > |
Namespaces | |
vctEulerRotation3Order | |
Macros | |
#define | VCT_DECLARE_EULER_CONVERSIONS(ORDER) |
Define an Euler angle rotation for a space of dimension 3. More... | |
Typedefs | |
typedef vctEulerRotation3 < vctEulerRotation3Order::ZYZ > | vctEulerZYZRotation3 |
typedef vctEulerRotation3 < vctEulerRotation3Order::ZYX > | vctEulerZYXRotation3 |
Functions | |
std::string CISST_EXPORT | vctEulerRotation3Order::ToString (vctEulerRotation3Order::OrderType order) |
Declaration of vctEulerRotation3.
#define VCT_DECLARE_EULER_CONVERSIONS | ( | ORDER | ) |
Define an Euler angle rotation for a space of dimension 3.
There are several conventions for Euler angle rotations, which depend on the order of rotations about the axes, and whether the rotations are intrinsic (i.e., about the body's coordinate frame) or extrinsic (i.e., about the world coordinate frame).
We use the common convention of three letters to define the order of (intrinsic) rotations. For example, ZYZ refers to a rotation of (or
) about Z, followed by a rotation of
(or
) about Y', followed by a rotation of
(or
) about Z''. Here, the Y' and Z'' denote that the rotations are about the new (rotated) Y and Z axes, respectively. For convenience (and to conform to C++ naming rules), the ' and '' are omitted from the naming convention. Note that when composing intrinsic rotations, the order is as follows:
. All angles are in radians.
The range of angles must still be determined. One possibility is to have and
be in the range (
,
], and
is in the range [0,
]. For now, the IsNormalized method always returns true.
Because there are so many possible Euler angle conventions, we implement a base class, vctEulerRotation3, and then specialize it with derived classes that are templated by the vctEulerRotation3Order::OrderType enum (see vctForwardDeclarations.h).
Note that we could have also templated the Euler angle class by element type (double or float), but decided that this was not worthwhile – all Euler angle rotation classes use double.
Define an Euler angle rotation in dimension 3 using ZYX (yaw-pitch-roll) order.
Define an Euler angle rotation in dimension 3 using ZYZ order.