17#ifndef ROOT_MathX_GenVectorX_Rotation3D
18#define ROOT_MathX_GenVectorX_Rotation3D 1
143 template <
class ForeignMatrix>
155 template <
class ForeignVector>
213 template <
class ForeignMatrix>
216 SetComponents(
m(0, 0),
m(0, 1),
m(0, 2),
m(1, 0),
m(1, 1),
m(1, 2),
m(2, 0),
m(2, 1),
m(2, 2));
234 template <
class ForeignVector>
254 template <
class ForeignVector>
269 for (
int i = 0; i < 9; ++i) {
284 for (
int i = 0; i < 9; ++i) {
298 std::copy(
fM,
fM + 9, begin);
307 template <
class ForeignMatrix>
326 template <
class ForeignMatrix>
383 return fM[i + 3 *
j];
384#if !defined(ROOT_MATH_SYCL) && !defined(ROOT_MATH_CUDA)
387 " indices i and j must range in {0,1,2}");
395 template <
class CoordSystem,
class U>
408 template <
class CoordSystem,
class U>
419 template <
class CoordSystem>
433 template <
class ForeignVector>
444 template <
class AVector>
506 return *
this = (*this) *
r;
514 if (
fM[0] !=
rhs.fM[0])
516 if (
fM[1] !=
rhs.fM[1])
518 if (
fM[2] !=
rhs.fM[2])
520 if (
fM[3] !=
rhs.fM[3])
522 if (
fM[4] !=
rhs.fM[4])
524 if (
fM[5] !=
rhs.fM[5])
526 if (
fM[6] !=
rhs.fM[6])
528 if (
fM[7] !=
rhs.fM[7])
530 if (
fM[8] !=
rhs.fM[8])
571#if !defined(ROOT_MATH_SYCL) && !defined(ROOT_MATH_CUDA)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint xy
AxisAngle class describing rotation represented with direction axis (3D Vector) and an angle of rotat...
EulerAngles class describing rotation as three angles (Euler Angles).
Rotation class with the (3D) rotation represented by a unit quaternion (u, i, j, k).
Rotation class with the (3D) rotation represented by a 3x3 orthogonal matrix.
Rotation3D operator*(const Rotation3D &r) const
Multiply (combine) two rotations.
void Invert()
Invert a rotation in place.
Rotation3D(AxisAngle const &a)
Construct from an AxisAngle.
Rotation3D(Quaternion const &q)
Construct from a Quaternion.
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 b...
Rotation3D & operator=(AxisAngle const &a)
Assign from an AxisAngle.
bool operator==(const Rotation3D &rhs) const
Equality/inequality operators.
Rotation3D & operator=(Rotation3D const &rhs)
Assignment operator.
void SetRotationMatrix(const ForeignMatrix &m)
Set components from a linear algebra matrix of size at least 3x3, which must support operator()(i,...
void GetComponents(ForeignVector &v1, ForeignVector &v2, ForeignVector &v3) const
Get components into three vectors which will be the (orthonormal) columns of the rotation matrix.
Rotation3D(RotationZ const &r)
Construct from an axial rotation.
Rotation3D & operator=(const ForeignMatrix &m)
Assign from an orthonormal linear algebra matrix of size 3x3, which must support operator()(i,...
DisplacementVector3D< CoordSystem, U > operator()(const DisplacementVector3D< CoordSystem, U > &v) const
Rotation operation on a displacement vector in any coordinate system.
void Rectify()
Re-adjust components to eliminate small deviations from perfect orthonormality.
Rotation3D(EulerAngles const &e)
Construct from EulerAngles.
Rotation3D(RotationX const &r)
PositionVector3D< CoordSystem, U > operator()(const PositionVector3D< CoordSystem, U > &v) const
Rotation operation on a position vector in any coordinate system.
Rotation3D & operator=(EulerAngles const &e)
Assign from EulerAngles.
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 de...
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)
Rotation3D(RotationY const &r)
Scalar operator()(size_t i, size_t j) const
Access operator, used to have direct access to rotation matrix's entries.
void GetRotationMatrix(ForeignMatrix &m) const
Get components into a linear algebra matrix of size at least 3x3, which must support operator()(i,...
void GetComponents(IT begin) const
Get the 9 matrix components into data specified by an iterator begin.
Rotation3D Inverse() const
Return inverse of a rotation.
Rotation3D & operator=(Quaternion const &q)
Assign from a Quaternion.
Rotation3D(IT begin, IT end)
Construct given a pair of pointers or iterators defining the beginning and end of an array of nine Sc...
bool operator!=(const Rotation3D &rhs) const
Rotation3D(const ForeignMatrix &m)
Construct from a linear algebra matrix of size at least 3x3, which must support operator()(i,...
LorentzVector< CoordSystem > operator()(const LorentzVector< CoordSystem > &v) const
Rotation operation on a Lorentz vector in any spatial coordinate system.
Rotation3D & operator=(RotationY const &r)
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 en...
Rotation3D()
Default constructor (identity rotation)
Rotation3D & operator=(RotationX const &r)
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 use...
Rotation3D & operator=(RotationZYX const &r)
Assign from RotationZYX.
AVector operator*(const AVector &v) const
Overload operator * for rotation on a vector.
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.
Rotation3D & operator*=(const R &r)
Post-Multiply (on right) by another rotation : T = T*R.
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.
ForeignVector operator()(const ForeignVector &v) const
Rotation operation on an arbitrary vector v.
Rotation3D(Rotation3D const &r)
copy constructor
Rotation3D & operator=(RotationZ const &r)
Assign from an axial rotation.
Rotation3D(RotationZYX const &e)
Construct from RotationZYX.
Rotation class representing a 3D rotation about the X axis by the angle of rotation.
Rotation class representing a 3D rotation about the Y axis by the angle of rotation.
Rotation class with the (3D) rotation represented by angles describing first a rotation of an angle p...
Rotation class representing a 3D rotation about the Z axis by the angle of rotation.
double dist(Rotation3D const &r1, Rotation3D const &r2)
void convert(R1 const &, R2 const)
AxisAngle::Scalar Distance(const AxisAngle &r1, const R &r2)
Distance between two rotations.
void GenVector_Throw(const char *)
function throwing exception, by creating internally a GenVector_exception only when needed
std::ostream & operator<<(std::ostream &os, const AxisAngle &a)
Stream Output and Input.
AxisAngle operator*(RotationX const &r1, AxisAngle const &r2)
Multiplication of an axial rotation by an AxisAngle.