#include <MEulerRotation.h>
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.
Public Types | |
enum | RotationOrder { kXYZ, kYZX, kZXY, kXZY, kYXZ, kZYX } |
Valid rotaton orders. More... | |
Public Member Functions | |
MEulerRotation () | |
The default class constructor. More... | |
MEulerRotation (const MEulerRotation &src) | |
The copy constructor. More... | |
MEulerRotation (const MVector &v, RotationOrder ord=kXYZ) | |
Class constructor. More... | |
MEulerRotation (double xx, double yy, double zz, RotationOrder ord=kXYZ) | |
Class constructor. More... | |
~MEulerRotation () | |
Class destructor. | |
MEulerRotation & | operator= (const MEulerRotation &src) |
The assignment operator. More... | |
MEulerRotation & | operator= (const MQuaternion &q) |
The assignment operator. More... | |
MEulerRotation & | operator= (const MMatrix &m) |
Convert the given 4X4 homogeneous rotation matrix to a euler rotation. More... | |
MEulerRotation & | operator= (const MVector &v) |
The assignment operator. More... | |
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. More... | |
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. More... | |
MQuaternion | asQuaternion () const |
Converts an euler rotation to a quaternion. More... | |
MMatrix | asMatrix () const |
Converts an euler rotation to a rotation matrix. More... | |
MVector | asVector () const |
Converts an euler rotation to a vector. More... | |
double | operator[] (unsigned int i) const |
The index operator. More... | |
MEulerRotation | operator+ (const MEulerRotation &other) const |
The euler rotation addition operator. More... | |
MEulerRotation & | operator+= (const MEulerRotation &other) |
The in place euler rotation addition operator. More... | |
MEulerRotation | operator- (const MEulerRotation &other) const |
The euler rotation subtraction operator. More... | |
MEulerRotation & | operator-= (const MEulerRotation &other) |
The in place euler rotation subtraction operator. More... | |
MEulerRotation | operator- () const |
The unary minus operator. More... | |
MEulerRotation | operator* (const MEulerRotation &other) const |
The euler rotation multiplication operator. More... | |
MEulerRotation | operator* (const MQuaternion &other) const |
This quaternion multiplication operator. More... | |
MEulerRotation | operator* (double other) const |
This scalar multiplication operator. More... | |
MEulerRotation & | operator*= (const MEulerRotation &other) |
The in place euler rotation multiplication operator. More... | |
MEulerRotation & | operator*= (const MQuaternion &other) |
The in place quaternion multiplication operator. More... | |
MEulerRotation & | operator*= (double other) |
The in place scalar multiplication operator. More... | |
bool | operator== (const MEulerRotation &other) const |
The euler rotation equality operator. More... | |
bool | operator!= (const MEulerRotation &other) const |
The euler rotation inequality operator. More... | |
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. More... | |
bool | isZero (double tolerance=kEulerRotationEpsilon) const |
This method returns true if this euler rotation is zero, within some given tolerance. More... | |
MEulerRotation & | incrementalRotateBy (const MVector &axis, double angle) |
Perform an incremental rotation by the specified axis and angle. More... | |
MEulerRotation | inverse () const |
Returns the inverse of this euler rotation. More... | |
MEulerRotation & | invertIt () |
Performs an in place inversion of this euler rotation. More... | |
MEulerRotation | reorder (RotationOrder ord) const |
Returns the reordering of this euler rotation, such that the euler rotation will have the specified rotation order. More... | |
MEulerRotation & | reorderIt (RotationOrder ord) |
Performs an in place reordering of this euler rotation, such that the euler rotation will have the specified rotation order. More... | |
MEulerRotation | bound () const |
Returns the result of bounding this rotation to be within +/- PI. More... | |
MEulerRotation & | boundIt (const MEulerRotation &src) |
Sets this euler rotation to be the input rotation that has been bound to be within +/- PI. More... | |
MEulerRotation & | boundIt () |
Bounds this rotation to be within +/- PI. More... | |
MEulerRotation | alternateSolution () const |
Returns an alternate solution to this rotation. More... | |
MEulerRotation & | setToAlternateSolution (const MEulerRotation &src) |
Sets this euler rotation to an alternate solution of the input rotation. More... | |
MEulerRotation & | setToAlternateSolution () |
Sets this euler rotation to an alternate solution of this rotation. More... | |
MEulerRotation | closestSolution (const MEulerRotation &dst) const |
Returns the euler rotation that is the closest solution to the "dst" euler rotation. More... | |
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. More... | |
MEulerRotation & | setToClosestSolution (const MEulerRotation &dst) |
Sets this euler rotation to the euler rotation that is the closest solution to the "dst" euler rotation. More... | |
MEulerRotation | closestCut (const MEulerRotation &dst) const |
Returns the closest cut of this rotation to "dst". More... | |
MEulerRotation & | setToClosestCut (const MEulerRotation &src, const MEulerRotation &dst) |
Sets this rotation to be the closest cut of "src" to "dst". More... | |
MEulerRotation & | setToClosestCut (const MEulerRotation &dst) |
Sets this rotation to be the closest cut to "dst". More... | |
double & | operator[] (unsigned int i) |
NO SCRIPT SUPPORT. More... | |
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. More... | |
static MEulerRotation | bound (const MEulerRotation &src) |
NO SCRIPT SUPPORT. More... | |
static MEulerRotation | alternateSolution (const MEulerRotation &src) |
NO SCRIPT SUPPORT. More... | |
static MEulerRotation | closestSolution (const MEulerRotation &src, const MEulerRotation &dst) |
NO SCRIPT SUPPORT. More... | |
static MEulerRotation | closestCut (const MEulerRotation &src, const MEulerRotation &dst) |
NO SCRIPT SUPPORT. More... | |
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. More... | |
OPENMAYA_EXPORT std::ostream & | operator<< (std::ostream &os, const MEulerRotation &rotation) |
NO SCRIPT SUPPORT. More... | |
enum RotationOrder |
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |