Rotation class with the (3D) rotation represented by a 3x3 orthogonal matrix.
This is the optimal representation for application to vectors. See also ROOT::Math::AxisAngle, ROOT::Math::EulerAngles, and ROOT::Math::Quaternion for classes which have conversion operators to Rotation3D.
All Rotations types (not only Rotation3D) can be applied to all 3D Vector classes (like ROOT::Math::DisplacementVector3D and ROOT::Math::PositionVector3D) and also to the 4D Vectors (ROOT::Math::LorentzVector classes), acting on the 3D components. A rotation operation is applied by using the operator() or the operator *. With the operator * is possible also to combine rotations. Note that the operator is NOT commutative, the order how the rotations are applied is relevant.
Definition at line 71 of file Rotation3D.h.
Public Types | |
enum | ERotation3DMatrixIndex { kXX = 0 , kXY = 1 , kXZ = 2 , kYX = 3 , kYY = 4 , kYZ = 5 , kZX = 6 , kZY = 7 , kZZ = 8 } |
typedef double | Scalar |
Public Member Functions | |
Rotation3D () | |
Default constructor (identity rotation) | |
Rotation3D (AxisAngle const &a) | |
Construct from an AxisAngle. | |
template<class ForeignMatrix > | |
Rotation3D (const ForeignMatrix &m) | |
Construct from a linear algebra matrix of size at least 3x3, which must support operator()(i,j) to obtain elements (0,0) thru (2,2). | |
template<class ForeignVector > | |
Rotation3D (const ForeignVector &v1, const ForeignVector &v2, const ForeignVector &v3) | |
Construct from three orthonormal vectors (which must have methods x(), y() and z()) which will be used as the columns of the rotation matrix. | |
Rotation3D (EulerAngles const &e) | |
Construct from EulerAngles. | |
template<class IT > | |
Rotation3D (IT begin, IT end) | |
Construct given a pair of pointers or iterators defining the beginning and end of an array of nine Scalars. | |
Rotation3D (Quaternion const &q) | |
Construct from a Quaternion. | |
Rotation3D (Rotation3D const &r) | |
copy constructor | |
Rotation3D (RotationX const &r) | |
Rotation3D (RotationY const &r) | |
Rotation3D (RotationZ const &r) | |
Construct from an axial rotation. | |
Rotation3D (RotationZYX const &e) | |
Construct from RotationZYX. | |
Rotation3D (Scalar xx, Scalar xy, Scalar xz, Scalar yx, Scalar yy, Scalar yz, Scalar zx, Scalar zy, Scalar zz) | |
Raw constructor from nine Scalar components (without any checking) | |
template<class ForeignVector > | |
void | GetComponents (ForeignVector &v1, ForeignVector &v2, ForeignVector &v3) const |
Get components into three vectors which will be the (orthonormal) columns of the rotation matrix. | |
template<class IT > | |
void | GetComponents (IT begin) const |
Get the 9 matrix components into data specified by an iterator begin. | |
template<class IT > | |
void | GetComponents (IT begin, IT end) const |
Get the 9 matrix components into data specified by an iterator begin and another to the end of the desired data (9 past start). | |
void | GetComponents (Scalar &xx, Scalar &xy, Scalar &xz, Scalar &yx, Scalar &yy, Scalar &yz, Scalar &zx, Scalar &zy, Scalar &zz) const |
Get the nine components into nine scalars. | |
template<class ForeignMatrix > | |
void | GetRotationMatrix (ForeignMatrix &m) const |
Get components into a linear algebra matrix of size at least 3x3, which must support operator()(i,j) for write access to elements (0,0) thru (2,2). | |
Rotation3D | Inverse () const |
Return inverse of a rotation. | |
void | Invert () |
Invert a rotation in place. | |
bool | operator!= (const Rotation3D &rhs) const |
template<class CoordSystem , class U > | |
DisplacementVector3D< CoordSystem, U > | operator() (const DisplacementVector3D< CoordSystem, U > &v) const |
Rotation operation on a displacement vector in any coordinate system. | |
template<class ForeignVector > | |
ForeignVector | operator() (const ForeignVector &v) const |
Rotation operation on an arbitrary vector v. | |
template<class CoordSystem > | |
LorentzVector< CoordSystem > | operator() (const LorentzVector< CoordSystem > &v) const |
Rotation operation on a Lorentz vector in any spatial coordinate system. | |
template<class CoordSystem , class U > | |
PositionVector3D< CoordSystem, U > | operator() (const PositionVector3D< CoordSystem, U > &v) const |
Rotation operation on a position vector in any coordinate system. | |
Scalar | operator() (size_t i, size_t j) const |
Access operator, used to have direct access to rotation matrix's entries. | |
template<class AVector > | |
AVector | operator* (const AVector &v) const |
Overload operator * for rotation on a vector. | |
Rotation3D | operator* (const AxisAngle &a) const |
Multiplication with arbitrary rotations. | |
Rotation3D | operator* (const EulerAngles &e) const |
Rotation3D | operator* (const Quaternion &q) const |
Rotation3D | operator* (const Rotation3D &r) const |
Multiply (combine) two rotations. | |
Rotation3D | operator* (const RotationX &rx) const |
Rotation3D | operator* (const RotationY &ry) const |
Rotation3D | operator* (const RotationZ &rz) const |
Rotation3D | operator* (const RotationZYX &r) const |
template<class R > | |
Rotation3D & | operator*= (const R &r) |
Post-Multiply (on right) by another rotation : T = T*R. | |
Rotation3D & | operator= (AxisAngle const &a) |
Assign from an AxisAngle. | |
template<class ForeignMatrix > | |
Rotation3D & | operator= (const ForeignMatrix &m) |
Assign from an orthonormal linear algebra matrix of size 3x3, which must support operator()(i,j) to obtain elements (0,0) thru (2,2). | |
Rotation3D & | operator= (EulerAngles const &e) |
Assign from EulerAngles. | |
Rotation3D & | operator= (Quaternion const &q) |
Assign from a Quaternion. | |
Rotation3D & | operator= (Rotation3D const &rhs) |
Assignment operator. | |
Rotation3D & | operator= (RotationX const &r) |
Rotation3D & | operator= (RotationY const &r) |
Rotation3D & | operator= (RotationZ const &r) |
Assign from an axial rotation. | |
Rotation3D & | operator= (RotationZYX const &r) |
Assign from RotationZYX. | |
bool | operator== (const Rotation3D &rhs) const |
Equality/inequality operators. | |
void | Rectify () |
Re-adjust components to eliminate small deviations from perfect orthonormality. | |
template<class ForeignVector > | |
void | SetComponents (const ForeignVector &v1, const ForeignVector &v2, const ForeignVector &v3) |
Set components from three orthonormal vectors (which must have methods x(), y() and z()) which will be used as the columns of the rotation matrix. | |
template<class IT > | |
void | SetComponents (IT begin, IT end) |
Set the 9 matrix components given an iterator to the start of the desired data, and another to the end (9 past start). | |
void | SetComponents (Scalar xx, Scalar xy, Scalar xz, Scalar yx, Scalar yy, Scalar yz, Scalar zx, Scalar zy, Scalar zz) |
Set the components from nine scalars – UNCHECKED for orthonormaility. | |
template<class ForeignMatrix > | |
void | SetRotationMatrix (const ForeignMatrix &m) |
Set components from a linear algebra matrix of size at least 3x3, which must support operator()(i,j) to obtain elements (0,0) thru (2,2). | |
Private Attributes | |
Scalar | fM [9] |
#include <MathX/GenVectorX/Rotation3D.h>
Definition at line 74 of file Rotation3D.h.
Enumerator | |
---|---|
kXX | |
kXY | |
kXZ | |
kYX | |
kYY | |
kYZ | |
kZX | |
kZY | |
kZZ |
Definition at line 76 of file Rotation3D.h.
ROOT::ROOT_MATH_ARCH::Rotation3D::Rotation3D | ( | ) |
Default constructor (identity rotation)
Definition at line 33 of file Rotation3D.cxx.
Construct given a pair of pointers or iterators defining the beginning and end of an array of nine Scalars.
Definition at line 100 of file Rotation3D.h.
|
inline |
copy constructor
Definition at line 108 of file Rotation3D.h.
Construct from an AxisAngle.
Definition at line 113 of file Rotation3D.h.
|
inlineexplicit |
Construct from EulerAngles.
Definition at line 118 of file Rotation3D.h.
|
inlineexplicit |
Construct from RotationZYX.
Definition at line 123 of file Rotation3D.h.
|
inlineexplicit |
Construct from a Quaternion.
Definition at line 128 of file Rotation3D.h.
Construct from an axial rotation.
Definition at line 133 of file Rotation3D.h.
Definition at line 134 of file Rotation3D.h.
Definition at line 135 of file Rotation3D.h.
|
inlineexplicit |
Construct from a linear algebra matrix of size at least 3x3, which must support operator()(i,j) to obtain elements (0,0) thru (2,2).
Precondition: The matrix is assumed to be orthonormal. No checking or re-adjusting is performed.
Definition at line 144 of file Rotation3D.h.
|
inline |
Construct from three orthonormal vectors (which must have methods x(), y() and z()) which will be used as the columns of the rotation matrix.
The orthonormality will be checked, and values adjusted so that the result will always be a good rotation matrix.
Definition at line 156 of file Rotation3D.h.
|
inline |
Raw constructor from nine Scalar components (without any checking)
Definition at line 166 of file Rotation3D.h.
|
inline |
Get components into three vectors which will be the (orthonormal) columns of the rotation matrix.
(The vector class must have a constructor from 3 Scalars.)
Definition at line 255 of file Rotation3D.h.
Get the 9 matrix components into data specified by an iterator begin.
Definition at line 296 of file Rotation3D.h.
Get the 9 matrix components into data specified by an iterator begin and another to the end of the desired data (9 past start).
Definition at line 282 of file Rotation3D.h.
|
inline |
Get the nine components into nine scalars.
Definition at line 359 of file Rotation3D.h.
|
inline |
Get components into a linear algebra matrix of size at least 3x3, which must support operator()(i,j) for write access to elements (0,0) thru (2,2).
Definition at line 327 of file Rotation3D.h.
|
inline |
Return inverse of a rotation.
Definition at line 458 of file Rotation3D.h.
void ROOT::ROOT_MATH_ARCH::Rotation3D::Invert | ( | ) |
Invert a rotation in place.
Definition at line 118 of file Rotation3D.cxx.
|
inline |
Definition at line 534 of file Rotation3D.h.
|
inline |
Rotation operation on a displacement vector in any coordinate system.
Definition at line 396 of file Rotation3D.h.
|
inline |
Rotation operation on an arbitrary vector v.
Preconditions: v must implement methods x(), y(), and z() and the arbitrary vector type must have a constructor taking (x,y,z)
Definition at line 434 of file Rotation3D.h.
|
inline |
Rotation operation on a Lorentz vector in any spatial coordinate system.
Definition at line 420 of file Rotation3D.h.
|
inline |
Rotation operation on a position vector in any coordinate system.
Definition at line 409 of file Rotation3D.h.
|
inline |
Access operator, used to have direct access to rotation matrix's entries.
i | row index in {0,1,2} |
j | column index in {0,1,2} |
Definition at line 380 of file Rotation3D.h.
Overload operator * for rotation on a vector.
Definition at line 445 of file Rotation3D.h.
Rotation3D ROOT::ROOT_MATH_ARCH::Rotation3D::operator* | ( | const AxisAngle & | a | ) | const |
Multiplication with arbitrary rotations.
Definition at line 126 of file Rotation3D.cxx.
Rotation3D ROOT::ROOT_MATH_ARCH::Rotation3D::operator* | ( | const EulerAngles & | e | ) | const |
Definition at line 132 of file Rotation3D.cxx.
Rotation3D ROOT::ROOT_MATH_ARCH::Rotation3D::operator* | ( | const Quaternion & | q | ) | const |
Definition at line 138 of file Rotation3D.cxx.
|
inline |
Multiply (combine) two rotations.
Definition at line 470 of file Rotation3D.h.
Rotation3D ROOT::ROOT_MATH_ARCH::Rotation3D::operator* | ( | const RotationX & | rx | ) | const |
Definition at line 18 of file Rotation3DxAxial.cxx.
Rotation3D ROOT::ROOT_MATH_ARCH::Rotation3D::operator* | ( | const RotationY & | ry | ) | const |
Definition at line 27 of file Rotation3DxAxial.cxx.
Rotation3D ROOT::ROOT_MATH_ARCH::Rotation3D::operator* | ( | const RotationZ & | rz | ) | const |
Definition at line 36 of file Rotation3DxAxial.cxx.
Rotation3D ROOT::ROOT_MATH_ARCH::Rotation3D::operator* | ( | const RotationZYX & | r | ) | const |
Definition at line 144 of file Rotation3D.cxx.
|
inline |
Post-Multiply (on right) by another rotation : T = T*R.
Definition at line 504 of file Rotation3D.h.
|
inline |
Assign from an AxisAngle.
Definition at line 185 of file Rotation3D.h.
|
inline |
Assign from an orthonormal linear algebra matrix of size 3x3, which must support operator()(i,j) to obtain elements (0,0) thru (2,2).
Definition at line 214 of file Rotation3D.h.
|
inline |
Assign from EulerAngles.
Definition at line 190 of file Rotation3D.h.
|
inline |
Assign from a Quaternion.
Definition at line 200 of file Rotation3D.h.
|
inline |
Assignment operator.
Definition at line 176 of file Rotation3D.h.
|
inline |
Definition at line 207 of file Rotation3D.h.
|
inline |
Definition at line 206 of file Rotation3D.h.
|
inline |
Assign from an axial rotation.
Definition at line 205 of file Rotation3D.h.
|
inline |
Assign from RotationZYX.
Definition at line 195 of file Rotation3D.h.
|
inline |
Equality/inequality operators.
Definition at line 512 of file Rotation3D.h.
void ROOT::ROOT_MATH_ARCH::Rotation3D::Rectify | ( | ) |
Re-adjust components to eliminate small deviations from perfect orthonormality.
Definition at line 47 of file Rotation3D.cxx.
|
inline |
Set components from three orthonormal vectors (which must have methods x(), y() and z()) which will be used as the columns of the rotation matrix.
The orthonormality will be checked, and values adjusted so that the result will always be a good rotation matrix.
Definition at line 235 of file Rotation3D.h.
Set the 9 matrix components given an iterator to the start of the desired data, and another to the end (9 past start).
Definition at line 267 of file Rotation3D.h.
|
inline |
Set the components from nine scalars – UNCHECKED for orthonormaility.
Definition at line 343 of file Rotation3D.h.
|
inline |
Set components from a linear algebra matrix of size at least 3x3, which must support operator()(i,j) to obtain elements (0,0) thru (2,2).
Precondition: The matrix is assumed to be orthonormal. NO checking or re-adjusting is performed.
Definition at line 308 of file Rotation3D.h.
|
private |
Definition at line 537 of file Rotation3D.h.