Euler Rotation Math.
This class provides methods for working with euler angle rotations. Euler angles are described by rotations in radians around the x, y, and z axes, and the order in which those rotations occur.
#include <MEulerRotation.h>
Public Types |
|
enum | RotationOrder
{ kXYZ, kYZX, kZXY, kXZY, kYXZ, kZYX } |
Valid rotaton orders. More... |
|
Public Member Functions |
|
MEulerRotation () | |
The default class constructor. |
|
MEulerRotation (const MEulerRotation &src) | |
The copy constructor. |
|
MEulerRotation (const MVector &v, RotationOrder ord=kXYZ) | |
Class constructor. |
|
MEulerRotation (double xx, double yy, double zz, RotationOrder ord=kXYZ) | |
Class constructor. |
|
~MEulerRotation () | |
Class destructor. |
|
MEulerRotation & | operator= (const MEulerRotation &src) |
The assignment operator. |
|
MEulerRotation & | operator= (const MQuaternion &q) |
The assignment operator. |
|
MEulerRotation & | operator= (const MMatrix &m) |
Convert the given 4X4 homogeneous rotation
matrix to a euler rotation. |
|
MEulerRotation & | operator= (const MVector &v) |
The assignment operator. |
|
MEulerRotation & | setValue (const MVector &v, RotationOrder ord=kXYZ) |
Sets the euler rotation to the values
contained in the vector and with the specified rotation order.
|
|
MEulerRotation & | setValue (double xx, double yy, double zz, RotationOrder ord=kXYZ) |
Sets the euler rotation to the x, y, and z
rotation components with the specified rotation order. |
|
MQuaternion | asQuaternion () const |
Converts an euler rotation to a quaternion.
|
|
MMatrix | asMatrix () const |
Converts an euler rotation to a rotation
matrix. |
|
MVector | asVector () const |
Converts an euler rotation to a vector.
|
|
double | operator[] (unsigned int i) const |
The index operator. |
|
MEulerRotation | operator+ (const MEulerRotation &other) const |
The euler rotation addition operator.
|
|
MEulerRotation & | operator+= (const MEulerRotation &other) |
The in place euler rotation addition
operator. |
|
MEulerRotation | operator- (const MEulerRotation &other) const |
The euler rotation subtraction operator.
|
|
MEulerRotation & | operator-= (const MEulerRotation &other) |
The in place euler rotation subtraction
operator. |
|
MEulerRotation | operator- () const |
The unary minus operator. |
|
MEulerRotation | operator* (const MEulerRotation &other) const |
The euler rotation multiplication operator.
|
|
MEulerRotation | operator* (const MQuaternion &other) const |
This quaternion multiplication operator.
|
|
MEulerRotation | operator* (double other) const |
This scalar multiplication operator.
|
|
MEulerRotation & | operator*= (const MEulerRotation &other) |
The in place euler rotation multiplication
operator. |
|
MEulerRotation & | operator*= (const MQuaternion &other) |
The in place quaternion multiplication
operator. |
|
MEulerRotation & | operator*= (double other) |
The in place scalar multiplication operator.
|
|
bool | operator== (const MEulerRotation &other) const |
The euler rotation equality operator.
|
|
bool | operator!= (const MEulerRotation &other) const |
The euler rotation inequality operator.
|
|
bool | isEquivalent (const MEulerRotation &other, double tolerance=kEulerRotationEpsilon) const |
This method returns true if this euler
rotation is equivalent, within some given tolerance, to the other
euler rotation. |
|
bool | isZero (double tolerance=kEulerRotationEpsilon) const |
This method returns true if this euler
rotation is zero, within some given tolerance. |
|
MEulerRotation & | incrementalRotateBy (const MVector &axis, double angle) |
Perform an incremental rotation by the
specified axis and angle. |
|
MEulerRotation | inverse () const |
Returns the inverse of this euler rotation.
|
|
MEulerRotation & | invertIt () |
Performs an in place inversion of this euler
rotation. |
|
MEulerRotation | reorder (RotationOrder ord) const |
Returns the reordering of this euler
rotation, such that the euler rotation will have the specified
rotation order. |
|
MEulerRotation & | reorderIt (RotationOrder ord) |
Performs an in place reordering of this
euler rotation, such that the euler rotation will have the
specified rotation order. |
|
MEulerRotation | bound () const |
Returns the result of bounding this rotation
to be within +/- PI. |
|
MEulerRotation & | boundIt (const MEulerRotation &src) |
Sets this euler rotation to be the input
rotation that has been bound to be within +/- PI. |
|
MEulerRotation & | boundIt () |
Bounds this rotation to be within +/- PI.
|
|
MEulerRotation | alternateSolution () const |
Returns an alternate solution to this
rotation. |
|
MEulerRotation & | setToAlternateSolution (const MEulerRotation &src) |
Sets this euler rotation to an alternate
solution of the input rotation. |
|
MEulerRotation & | setToAlternateSolution () |
Sets this euler rotation to an alternate
solution of this rotation. |
|
MEulerRotation | closestSolution (const MEulerRotation &dst) const |
Returns the euler rotation that is the
closest solution to the "dst" euler rotation. |
|
MEulerRotation & | setToClosestSolution (const MEulerRotation &src, const MEulerRotation &dst) |
Sets this euler rotation to the euler
rotation that is the closest solution of the "src" euler rotation
to the "dst" euler rotation. |
|
MEulerRotation & | setToClosestSolution (const MEulerRotation &dst) |
Sets this euler rotation to the euler
rotation that is the closest solution to the "dst" euler rotation.
|
|
MEulerRotation | closestCut (const MEulerRotation &dst) const |
Returns the closest cut of this rotation to
"dst". |
|
MEulerRotation & | setToClosestCut (const MEulerRotation &src, const MEulerRotation &dst) |
Sets this rotation to be the closest cut of
"src" to "dst". |
|
MEulerRotation & | setToClosestCut (const MEulerRotation &dst) |
Sets this rotation to be the closest cut to
"dst". |
|
double & | operator[] (unsigned int i) |
NO SCRIPT SUPPORT. |
|
Static Public Member Functions |
|
static MEulerRotation | decompose (const MMatrix &matrix, RotationOrder ord) |
Decompose a rotation matrix into the desired
euler angles with the specified order. |
|
static MEulerRotation | bound (const MEulerRotation &src) |
NO SCRIPT SUPPORT. |
|
static MEulerRotation | alternateSolution (const MEulerRotation &src) |
NO SCRIPT SUPPORT. |
|
static MEulerRotation | closestSolution (const MEulerRotation &src, const MEulerRotation &dst) |
NO SCRIPT SUPPORT. |
|
static MEulerRotation | closestCut (const MEulerRotation &src, const MEulerRotation &dst) |
NO SCRIPT SUPPORT. |
|
Public Attributes |
|
double | x |
The x component of the euler rotation in
radians. |
|
double | y |
The y component of the euler rotation in
radians. |
|
double | z |
The z component of the euler rotation in
radians. |
|
RotationOrder | order |
The rotation order of the euler
rotation. |
|
Static Public Attributes |
|
static const MEulerRotation | identity |
The euler rotation identity. The rotation
order is XYZ. |
|
Friends |
|
OPENMAYA_EXPORT MEulerRotation | operator* (double scale, const MEulerRotation &other) |
NO SCRIPT SUPPORT. |
|
OPENMAYA_EXPORT std::ostream & | operator<< (std::ostream &os, const MEulerRotation &rotation) |
NO SCRIPT SUPPORT. |
enum RotationOrder |
Valid rotaton orders.
MEulerRotation | ( | ) |
The default class constructor.
The rotation order is set to XYZ.
MEulerRotation | ( | const MEulerRotation & | src | ) |
The copy constructor.
Creates a new euler rotation and initializes it to the same values as the given euler rotation.
[in] | src | the euler rotation to copy |
MEulerRotation | ( | const MVector & | v, |
MEulerRotation::RotationOrder | ord = kXYZ |
||
) |
Class constructor.
Construct an euler rotation from a vector with the given rotation order.
[in] | v | vector from which to set the x, y, and z rotation components |
[in] | ord | the rotation order; the default rotation order is XYZ |
MEulerRotation | ( | double | xx, |
double | yy, | ||
double | zz, | ||
MEulerRotation::RotationOrder | ord = kXYZ |
||
) |
Class constructor.
Initializes the euler rotation with the explicit x, y, z, and rotation order values provided as arguments.
[in] | xx | the x component of the euler rotation |
[in] | yy | the y component of the euler rotation |
[in] | zz | the z component of the euler rotation |
[in] | ord | the rotation order of the euler rotation; the default rotation order is XYZ |
MEulerRotation & operator= | ( | const MEulerRotation & | src | ) |
The assignment operator.
[in] | src | the source euler rotation |
MEulerRotation & operator= | ( | const MQuaternion & | q | ) |
The assignment operator.
[in] | q | the source quaternion |
MEulerRotation & operator= | ( | const MMatrix & | m | ) |
Convert the given 4X4 homogeneous rotation matrix to a euler rotation.
[in] | m | the matrix to be converted to a euler rotation |
MEulerRotation & operator= | ( | const MVector & | v | ) |
The assignment operator.
[in] | v | the source vector from which the x, y, and z rotation components are set |
MEulerRotation & setValue | ( | const MVector & | v, |
MEulerRotation::RotationOrder | ord = kXYZ |
||
) |
Sets the euler rotation to the values contained in the vector and with the specified rotation order.
[in] | v | vector from which to set the x, y, and z rotation components |
[in] | ord | the rotation order; the default rotation order is XYZ |
MEulerRotation & setValue | ( | double | xx, |
double | yy, | ||
double | zz, | ||
MEulerRotation::RotationOrder | ord = kXYZ |
||
) |
Sets the euler rotation to the x, y, and z rotation components with the specified rotation order.
[in] | xx | the x component of the rotation |
[in] | yy | the y component of the rotation |
[in] | zz | the z component of the rotation |
[in] | ord | the rotation order; the default rotation order is XYZ |
MQuaternion asQuaternion | ( | ) | const |
Converts an euler rotation to a quaternion.
MMatrix asMatrix | ( | ) | const |
Converts an euler rotation to a rotation matrix.
MVector asVector | ( | ) | const |
Converts an euler rotation to a vector.
The rotation order component is dropped.
double operator[] | ( | unsigned int | i | ) | const |
The index operator.
If its argument is 0 it will return the x component of the euler rotation. If its argument is 1 it will return the y component of the euler rotation. If its argument is 2 it will return the z component of the euler rotation.
[in] | i | value indicating which component to return |
MEulerRotation operator+ | ( | const MEulerRotation & | other | ) | const |
The euler rotation addition operator.
[in] | other | the euler rotation to be added to this euler rotation |
MEulerRotation & operator+= | ( | const MEulerRotation & | other | ) |
The in place euler rotation addition operator.
[in] | other | the euler rotation to be added with this euler rotation |
MEulerRotation operator- | ( | const MEulerRotation & | other | ) | const |
The euler rotation subtraction operator.
[in] | other | the euler rotation to be subtracted from this euler rotation |
MEulerRotation & operator-= | ( | const MEulerRotation & | other | ) |
The in place euler rotation subtraction operator.
[in] | other | the euler rotation to be subtracted from this euler rotation |
MEulerRotation operator- | ( | ) | const |
The unary minus operator.
Negates the value of each of the x, y, and z components of the euler rotation. The order remains the same.
MEulerRotation operator* | ( | const MEulerRotation & | other | ) | const |
The euler rotation multiplication operator.
[in] | other | the euler rotation to be multiplied with this euler rotation |
MEulerRotation operator* | ( | const MQuaternion & | other | ) | const |
This quaternion multiplication operator.
[in] | other | the quaternion to be multiplied with this euler rotation |
MEulerRotation operator* | ( | double | other | ) | const |
This scalar multiplication operator.
[in] | other | the scalar value to be multiplied with this euler rotation |
MEulerRotation & operator*= | ( | const MEulerRotation & | other | ) |
The in place euler rotation multiplication operator.
[in] | other | the euler rotation to be multiplied with this euler rotation |
MEulerRotation & operator*= | ( | const MQuaternion & | other | ) |
The in place quaternion multiplication operator.
[in] | other | the quaternion to be multiplied with this euler rotation |
MEulerRotation & operator*= | ( | double | other | ) |
The in place scalar multiplication operator.
[in] | other | the double to be multiplied with this euler rotation |
bool operator== | ( | const MEulerRotation & | other | ) | const |
The euler rotation equality operator.
[in] | other | the euler rotation to be compared with this euler rotation |
bool operator!= | ( | const MEulerRotation & | other | ) | const |
The euler rotation inequality operator.
[in] | other | the euler rotation to be compared with this euler rotation |
bool isEquivalent | ( | const MEulerRotation & | other, |
double | tolerance =
kEulerRotationEpsilon |
||
) | const |
This method returns true if this euler rotation is equivalent, within some given tolerance, to the other euler rotation.
'tolerance' defaults to kEulerRotationEpsilon which is 1.0e-10
[in] | other | the euler rotation to be compared with this euler rotation |
[in] | tolerance | the amount of variation allowed for equivalency |
bool isZero | ( | double | tolerance =
kEulerRotationEpsilon |
) | const |
This method returns true if this euler rotation is zero, within some given tolerance.
'tolerance' defaults to kEulerRotationEpsilon which is 1.0e-10
[in] | tolerance | the amount of variation allowed for equivalency to zero |
MEulerRotation & incrementalRotateBy | ( | const MVector & | axis, |
double | angle | ||
) |
Perform an incremental rotation by the specified axis and angle.
The rotation is broken down and performed in smaller steps so that the angles update properly.
[in] | axis | the axis to rotate around |
[in] | angle | the angle by which to rotate around the axis |
MEulerRotation inverse | ( | ) | const |
Returns the inverse of this euler rotation.
The rotation order will be reversed.
MEulerRotation & invertIt | ( | ) |
Performs an in place inversion of this euler rotation.
The rotation order will be reversed.
MEulerRotation reorder | ( | MEulerRotation::RotationOrder | ord | ) | const |
Returns the reordering of this euler rotation, such that the euler rotation will have the specified rotation order.
[in] | ord | the new rotation order of the euler rotation |
MEulerRotation & reorderIt | ( | MEulerRotation::RotationOrder | ord | ) |
Performs an in place reordering of this euler rotation, such that the euler rotation will have the specified rotation order.
[in] | ord | the new rotation order of the euler rotation |
MEulerRotation bound | ( | ) | const |
Returns the result of bounding this rotation to be within +/- PI.
Bounding a rotation to be within +/- PI is defined to be the result of offsetting the rotation by +/- 2nPI (term by term) such that the offset is within +/- PI.
MEulerRotation & boundIt | ( | const MEulerRotation & | src | ) |
Sets this euler rotation to be the input rotation that has been bound to be within +/- PI.
Bounding a rotation to be within +/- PI is defined to be the result of offsetting the rotation by +/- 2nPI (term by term) such that the offset is within +/- PI.
[in] | src | the input rotation that will be bound |
MEulerRotation & boundIt | ( | ) |
Bounds this rotation to be within +/- PI.
Bounding a rotation to be within +/- PI is defined to be the result of offsetting the rotation by +/- 2nPI (term by term) such that the offset is within +/- PI.
MEulerRotation alternateSolution | ( | ) | const |
Returns an alternate solution to this rotation.
The resulting rotation will be bound between +/- PI, and the rotation order will remain unchanged.
MEulerRotation & setToAlternateSolution | ( | const MEulerRotation & | src | ) |
Sets this euler rotation to an alternate solution of the input rotation.
The resulting rotation will be bound between +/- PI, and the rotation order will remain unchanged.
[in] | src | the rotation to compute an alternate solution to |
MEulerRotation & setToAlternateSolution | ( | ) |
Sets this euler rotation to an alternate solution of this rotation.
The resulting rotation will be bound between +/- PI, and the rotation order will remain unchanged.
MEulerRotation closestSolution | ( | const MEulerRotation & | dst | ) | const |
Returns the euler rotation that is the closest solution to the "dst" euler rotation.
[in] | dst | the euler rotation to which the solution should be closest |
MEulerRotation & setToClosestSolution | ( | const MEulerRotation & | src, |
const MEulerRotation & | dst | ||
) |
Sets this euler rotation to the euler rotation that is the closest solution of the "src" euler rotation to the "dst" euler rotation.
[in] | src | the euler rotation whose closest solution will be calculated |
[in] | dst | the euler rotation to which the solution should be closest |
MEulerRotation & setToClosestSolution | ( | const MEulerRotation & | dst | ) |
Sets this euler rotation to the euler rotation that is the closest solution to the "dst" euler rotation.
[in] | dst | the euler rotation to which the solution should be closest |
MEulerRotation closestCut | ( | const MEulerRotation & | dst | ) | const |
Returns the closest cut of this rotation to "dst".
The closest cut of rotation A to rotation B is defined to be the rotation that is +/- 2nPI to rotation A (term by term) and within +/- PI to rotation B.
[in] | dst | the range of the closest cut |
MEulerRotation & setToClosestCut | ( | const MEulerRotation & | src, |
const MEulerRotation & | dst | ||
) |
Sets this rotation to be the closest cut of "src" to "dst".
The closest cut of rotation A to rotation B is defined to be the rotation that is +/- 2nPI to rotation A (term by term) and within +/- PI to rotation B.
[in] | src | the euler rotation whose terms will be offset by +/- 2nPI |
[in] | dst | the range of the closest cut |
MEulerRotation & setToClosestCut | ( | const MEulerRotation & | dst | ) |
Sets this rotation to be the closest cut to "dst".
The closest cut of rotation A to rotation B is defined to be the rotation that is +/- 2nPI to rotation A (term by term) and within +/- PI to rotation B.
[in] | dst | the range of the closest cut |
MEulerRotation decompose | ( | const MMatrix & | matrix, |
MEulerRotation::RotationOrder | ord | ||
) | [static] |
Decompose a rotation matrix into the desired euler angles with the specified order.
[in] | matrix | the matrix that will be decomposed into an euler rotation with the specified order |
[in] | ord | the order which the euler rotation will have |
double & operator[] | ( | unsigned int | i | ) |
NO SCRIPT SUPPORT.
The index operator.
If its argument is 0 it will return the x component of the euler rotation. If its argument is 1 it will return the y component of the euler rotation. If its argument is 2 it will return the z component of the euler rotation.
[in] | i | value indicating which component to return |
MEulerRotation bound | ( | const MEulerRotation & | src | ) | [static] |
NO SCRIPT SUPPORT.
Returns the euler rotation that bounds the input rotation to be within +/- PI.
Bounding a rotation to be within +/- PI is defined to be the result of offsetting the rotation by +/- 2nPI (term by term) such that the offset is within +/- PI.
[in] | src | the input rotation |
MEulerRotation alternateSolution | ( | const MEulerRotation & | src | ) | [static] |
NO SCRIPT SUPPORT.
Returns the euler rotation that is an alternate solution of the input rotation.
The resulting rotation will be bound between +/- PI, and the rotation order will remain unchanged.
[in] | src | the rotation to compute an alternate solution to |
MEulerRotation closestSolution | ( | const MEulerRotation & | src, |
const MEulerRotation & | dst | ||
) | [static] |
NO SCRIPT SUPPORT.
Returns the euler rotation that is the closest solution of the "src" euler rotation to the "dst" euler rotation.
[in] | src | the euler rotation whose closest solution will be calculated |
[in] | dst | the euler rotation to which the solution should be closest |
MEulerRotation closestCut | ( | const MEulerRotation & | src, |
const MEulerRotation & | dst | ||
) | [static] |
NO SCRIPT SUPPORT.
Returns the euler rotation that is the closest cut of "src" to "dst".
The closest cut of rotation A to rotation B is defined to be the rotation that is +/- 2nPI to rotation A (term by term) and within +/- PI to rotation B.
[in] | src | the euler rotation whose terms will be offset by +/- 2nPI |
[in] | dst | the range of the closest cut |
OPENMAYA_EXPORT MEulerRotation operator* | ( | double | scale, |
const MEulerRotation & | other | ||
) | [friend] |
NO SCRIPT SUPPORT.
[in] | scale | the amount by which the euler rotation should be scaled |
[in] | other | the euler rotation to which the scale should be applied |
OPENMAYA_EXPORT std::ostream& operator<< | ( | std::ostream & | os, |
const MEulerRotation & | rotation | ||
) | [friend] |
NO SCRIPT SUPPORT.
The format used is [order: order, x: x, y: y, z: z], where x, y, and z are in degrees.
[in] | os | the ostream to print to |
[in] | rotation | the euler rotation to be printed x |