Rotation class with the (3D) rotation represented by a unit quaternion (u, i, j, k).
This is the optimal representation for multiplication of multiple rotations, and for computation of group-manifold-invariant distance between two rotations. See also ROOT::Math::AxisAngle, ROOT::Math::EulerAngles, and ROOT::Math::Rotation3D.
Definition at line 52 of file Quaternion.h.
Public Types | |
| typedef double | Scalar |
| typedef DisplacementVector3D< Cartesian3D< double >, DefaultCoordinateSystemTag > | XYZVector |
| Rotation operation on a cartesian vector. | |
Public Member Functions | |
| Quaternion () | |
| Default constructor (identity rotation) | |
| template<class OtherRotation > | |
| Quaternion (const OtherRotation &r) | |
| Construct from another supported rotation type (see gv_detail::convert ) | |
| template<class IT > | |
| Quaternion (IT begin, IT end) | |
| Construct given a pair of pointers or iterators defining the beginning and end of an array of four Scalars. | |
| Quaternion (Scalar u, Scalar i, Scalar j, Scalar k) | |
| Construct from four Scalars representing the coefficients of u, i, j, k. | |
| Scalar | Distance (const Quaternion &q) const |
| Distance between two rotations in Quaternion form Note: The rotation group is isomorphic to a 3-sphere with diametrically opposite points identified. | |
| template<class IT > | |
| void | GetComponents (IT begin) const |
| Get the components into data specified by an iterator begin. | |
| template<class IT > | |
| void | GetComponents (IT begin, IT end) const |
| Get the components into data specified by an iterator begin and another to the end of the desired data (4 past start). | |
| void | GetComponents (Scalar &u, Scalar &i, Scalar &j, Scalar &k) const |
| Get the components into four Scalars. | |
| Scalar | I () const |
| Quaternion | Inverse () const |
| Return inverse of a rotation. | |
| void | Invert () |
| Invert a rotation in place. | |
| Scalar | J () const |
| Scalar | K () const |
| bool | operator!= (const Quaternion &rhs) const |
| template<class CoordSystem , class Tag > | |
| DisplacementVector3D< CoordSystem, Tag > | operator() (const DisplacementVector3D< CoordSystem, Tag > &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 4D coordinate system. | |
| template<class CoordSystem , class Tag > | |
| PositionVector3D< CoordSystem, Tag > | operator() (const PositionVector3D< CoordSystem, Tag > &p) const |
| Rotation operation on a position vector in any coordinate system. | |
| XYZVector | operator() (const XYZVector &v) const |
| template<class AVector > | |
| AVector | operator* (const AVector &v) const |
| Overload operator * for rotation on a vector. | |
| Quaternion | operator* (const AxisAngle &a) const |
| Quaternion | operator* (const EulerAngles &e) const |
| Quaternion | operator* (const Quaternion &q) const |
| Multiply (combine) two rotations. | |
| Quaternion | operator* (const Rotation3D &r) const |
| Quaternion | operator* (const RotationX &rx) const |
| Quaternion | operator* (const RotationY &ry) const |
| Quaternion | operator* (const RotationZ &rz) const |
| Quaternion | operator* (const RotationZYX &r) const |
| template<class R > | |
| Quaternion & | operator*= (const R &r) |
| Post-Multiply (on right) by another rotation : T = T*R. | |
| template<class OtherRotation > | |
| Quaternion & | operator= (OtherRotation const &r) |
| Assign from another supported rotation type (see gv_detail::convert ) | |
| bool | operator== (const Quaternion &rhs) const |
| Equality/inequality operators. | |
| void | Rectify () |
| Re-adjust components to eliminate small deviations from |Q| = 1 orthonormality. | |
| template<class IT > | |
| void | SetComponents (IT begin, IT end) |
| Set the four components given an iterator to the start of the desired data, and another to the end (4 past start). | |
| void | SetComponents (Scalar u, Scalar i, Scalar j, Scalar k) |
| Set the components based on four Scalars. | |
| Scalar | U () const |
| Access to the four quaternion components: U() is the coefficient of the identity Pauli matrix, I(), J() and K() are the coefficients of sigma_x, sigma_y, sigma_z. | |
Private Attributes | |
| Scalar | fI |
| Scalar | fJ |
| Scalar | fK |
| Scalar | fU |
#include <MathX/GenVectorX/Quaternion.h>
Definition at line 55 of file Quaternion.h.
| typedef DisplacementVector3D<Cartesian3D<double>, DefaultCoordinateSystemTag> ROOT::ROOT_MATH_ARCH::Quaternion::XYZVector |
Rotation operation on a cartesian vector.
Definition at line 190 of file Quaternion.h.
|
inline |
Default constructor (identity rotation)
Definition at line 62 of file Quaternion.h.
Construct given a pair of pointers or iterators defining the beginning and end of an array of four Scalars.
Definition at line 69 of file Quaternion.h.
|
inlineexplicit |
Construct from another supported rotation type (see gv_detail::convert )
Definition at line 80 of file Quaternion.h.
Construct from four Scalars representing the coefficients of u, i, j, k.
Definition at line 88 of file Quaternion.h.
| Quaternion::Scalar ROOT::ROOT_MATH_ARCH::Quaternion::Distance | ( | const Quaternion & | q | ) | const |
Distance between two rotations in Quaternion form Note: The rotation group is isomorphic to a 3-sphere with diametrically opposite points identified.
The (rotation group-invariant) is the smaller of the two possible angles between the images of the two totations on that sphere. Thus the distance is never greater than pi/2.
Definition at line 101 of file Quaternion.cxx.
Get the components into data specified by an iterator begin.
Definition at line 144 of file Quaternion.h.
|
inline |
Get the components into data specified by an iterator begin and another to the end of the desired data (4 past start).
Definition at line 130 of file Quaternion.h.
|
inline |
Get the components into four Scalars.
Definition at line 167 of file Quaternion.h.
|
inline |
Definition at line 181 of file Quaternion.h.
|
inline |
Return inverse of a rotation.
Definition at line 273 of file Quaternion.h.
|
inline |
Invert a rotation in place.
Definition at line 263 of file Quaternion.h.
|
inline |
Definition at line 182 of file Quaternion.h.
|
inline |
Definition at line 183 of file Quaternion.h.
|
inline |
Definition at line 333 of file Quaternion.h.
|
inline |
Rotation operation on a displacement vector in any coordinate system.
Definition at line 206 of file Quaternion.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 244 of file Quaternion.h.
|
inline |
Rotation operation on a Lorentz vector in any 4D coordinate system.
Definition at line 230 of file Quaternion.h.
|
inline |
Rotation operation on a position vector in any coordinate system.
Definition at line 219 of file Quaternion.h.
Definition at line 191 of file Quaternion.h.
|
inline |
Overload operator * for rotation on a vector.
Definition at line 255 of file Quaternion.h.
| Quaternion ROOT::ROOT_MATH_ARCH::Quaternion::operator* | ( | const AxisAngle & | a | ) | const |
Definition at line 83 of file Quaternion.cxx.
| Quaternion ROOT::ROOT_MATH_ARCH::Quaternion::operator* | ( | const EulerAngles & | e | ) | const |
Definition at line 89 of file Quaternion.cxx.
|
inline |
Multiply (combine) two rotations.
Multiply (combine) two rotations
Definition at line 283 of file Quaternion.h.
| Quaternion ROOT::ROOT_MATH_ARCH::Quaternion::operator* | ( | const Rotation3D & | r | ) | const |
Definition at line 77 of file Quaternion.cxx.
| Quaternion ROOT::ROOT_MATH_ARCH::Quaternion::operator* | ( | const RotationX & | rx | ) | const |
Definition at line 32 of file QuaternionXaxial.cxx.
| Quaternion ROOT::ROOT_MATH_ARCH::Quaternion::operator* | ( | const RotationY & | ry | ) | const |
Definition at line 40 of file QuaternionXaxial.cxx.
| Quaternion ROOT::ROOT_MATH_ARCH::Quaternion::operator* | ( | const RotationZ & | rz | ) | const |
Definition at line 48 of file QuaternionXaxial.cxx.
| Quaternion ROOT::ROOT_MATH_ARCH::Quaternion::operator* | ( | const RotationZYX & | r | ) | const |
Definition at line 95 of file Quaternion.cxx.
|
inline |
Post-Multiply (on right) by another rotation : T = T*R.
Definition at line 301 of file Quaternion.h.
|
inline |
Assign from another supported rotation type (see gv_detail::convert )
Definition at line 102 of file Quaternion.h.
|
inline |
Equality/inequality operators.
Definition at line 321 of file Quaternion.h.
| void ROOT::ROOT_MATH_ARCH::Quaternion::Rectify | ( | ) |
Re-adjust components to eliminate small deviations from |Q| = 1 orthonormality.
Definition at line 38 of file Quaternion.cxx.
|
inline |
Set the four components given an iterator to the start of the desired data, and another to the end (4 past start).
Definition at line 115 of file Quaternion.h.
|
inline |
Set the components based on four Scalars.
The sum of the squares of these Scalars should be 1; no checking is done.
Definition at line 156 of file Quaternion.h.
|
inline |
|
private |
Definition at line 337 of file Quaternion.h.
|
private |
Definition at line 338 of file Quaternion.h.
|
private |
Definition at line 339 of file Quaternion.h.
|
private |
Definition at line 336 of file Quaternion.h.