protected:
TRotation TRotation(Double_t, Double_t, Double_t, Double_t, Double_t, Double_t, Double_t, Double_t, Double_t)
public:
TRotation TRotation()
TRotation TRotation(const TRotation&)
TRotation operator*(const TRotation&) const
TRotation Inverse() const
void ~TRotation()
void AngleAxis(Double_t&, TVector3&) const
static TClass* Class()
TRotation& Invert()
virtual TClass* IsA() const
Bool_t IsIdentity() const
Bool_t operator!=(const TRotation& m) const
Double_t operator()(int, int) const
TVector3 operator*(const TVector3& p) const
TRotation& operator*=(const TRotation& m)
TRotation& operator=(const TRotation& m)
Bool_t operator==(const TRotation& m) const
TRotation::TRotationRow operator[](int i) const
Double_t PhiX() const
Double_t PhiY() const
Double_t PhiZ() const
TRotation& Rotate(Double_t, const TVector3&)
TRotation& Rotate(Double_t psi, const TVector3* p)
TRotation& RotateAxes(const TVector3& newX, const TVector3& newY, const TVector3& newZ)
TRotation& RotateX(Double_t)
TRotation& RotateY(Double_t)
TRotation& RotateZ(Double_t)
virtual void ShowMembers(TMemberInspector& insp, char* parent)
virtual void Streamer(TBuffer& b)
void StreamerNVirtual(TBuffer& b)
Double_t ThetaX() const
Double_t ThetaY() const
Double_t ThetaZ() const
TRotation& Transform(const TRotation& m)
Double_t XX() const
Double_t XY() const
Double_t XZ() const
Double_t YX() const
Double_t YY() const
Double_t YZ() const
Double_t ZX() const
Double_t ZY() const
Double_t ZZ() const
protected:
Double_t fxx
Double_t fxy
Double_t fxz
Double_t fyx
Double_t fyy
Double_t fyz
Double_t fzx
Double_t fzy
Double_t fzz
*-*-*-*-*-*-*-*-*-*-*-*The Physics Vector package *-*-*-*-*-*-*-*-*-*-*-* *-* ========================== * *-* The Physics Vector package consists of five classes: * *-* - TVector2 * *-* - TVector3 * *-* - TRotation * *-* - TLorentzVector * *-* - TLorentzRotation * *-* It is a combination of CLHEPs Vector package written by * *-* Leif Lonnblad, Andreas Nilsson and Evgueni Tcherniaev * *-* and a ROOT package written by Pasha Murat. * *-* for CLHEP see: http://wwwinfo.cern.ch/asd/lhc++/clhep/ * *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* /*TRotation
The TRotation class describes a rotation of objects of the TVector3 class. It is a 3*3 matrix of Double_t:| xx xy xz |
| yx yy yz |
| zx zy zz |It describes a socalled active rotation, i.e. rotation of objects inside a static system of coordinates. In case you want to rotate the frame and want to know the coordinates of objects in the rotated system, you should apply the inverse rotation to the objects. If you want to transform coordinates from the rotated frame to the original frame you have to apply the direct transformation.
A rotation around a specified axis means counterclockwise rotation around the positive direction of the axis.
Declaration, Access, Comparisons
TRotation r; // r initialized as identity
TRotation m(r); // m = rThere is no direct way to to set the matrix elements - to ensure that a TRotation object always describes a real rotation. But you can get the values by the member functions XX()..ZZ() or the (,) operator:
Double_t xx = r.XX(); // the same as xx=r(0,0)
xx = r(0,0);if (r==m) {...} // test for equality
if (r!=m) {..} // test for inequality
if (r.IsIdentity()) {...} // test for identity
Rotation around axes
The following matrices desrcibe counterclockwise rotations around coordinate axes| 1 0 0 |
Rx(a) = | 1 cos(a) -sin(a) |
| 0 sin(a) cos(a) || cos(a) 0 sin(a) |
Ry(a) = | 0 1 0 |
| -sin(a) 0 cos(a) || cos(a) -sin(a) 0 |
Rz(a) = | sin(a) cos(a) 0 |
| 0 0 1 |
and are implemented as member functions RotateX(), RotateY() and RotateZ():r.RotateX(TMath::Pi()); // rotation around the x-axis
Rotation around arbitary axis
The member function Rotate() allows to rotate around an arbitary vector (not neccessary a unit one) and returns the result.r.Rotate(TMath::Pi()/3,TVector3(3,4,5));
It is possible to find a unit vector and an angle, which describe the same rotation as the current one:
Double_t angle;
TVector3 axis;
r.GetAngleAxis(angle,axis);Rotation of local axes
Member function RotateAxes() adds a rotation of local axes to the current rotation and returns the result:TVector3 newX(0,1,0);
TVector3 newY(0,0,1);
TVector3 newZ(1,0,0);
a.RotateAxes(newX,newX,newZ);Memberfunctions ThetaX(), ThetaY(), ThetaZ(), PhiX(), PhiY(),PhiZ() return azimuth and polar angles of the rotated axes:
Double_t tx,ty,tz,px,py,pz;
tx= a.ThetaX();
...
pz= a.PhiZ();Inverse rotation
TRotation a,b;
...
b = a.Inverse(); // b is inverse of a, a is unchanged
b = a.Invert(); // invert a and set b = aCompound Rotations
The operator * has been implemented in a way that follows the mathematical notation of a product of the two matrices which describe the two consecutiv rotations. Therefore the second rotation should be placed first:r = r2 * r1;
Rotation of TVector3
The TRotation class provides an operator * which allows to express a rotation of a TVector3 analog to the mathematical notation| x' | | xx xy xz | | x |
| y' | = | yx yy yz | | y |
| z' | | zx zy zz | | z |e.g.:
TVector3 v(1,1,1);
v = r * v;You can also use the Transform() member function or the operator *= of the
TVector3 class:TVector3 v;
TRotation r;
v.Transform(r);
v *= r; //Attention v = r * v */
Double_t XX() const
Double_t XY() const
Double_t XZ() const
Double_t YX() const
Double_t YY() const
Double_t YZ() const
Double_t ZX() const
Double_t ZY() const
Double_t ZZ() const
TRotation::TRotationRow operator[](int i) const
Double_t operator()(int, int) const
TRotation& operator=(const TRotation& m)
Bool_t operator==(const TRotation& m) const
Bool_t operator!=(const TRotation& m) const
Bool_t IsIdentity() const
TVector3 operator*(const TVector3& p) const
TRotation operator*(const TRotation&) const
TRotation& operator*=(const TRotation& m)
TRotation& Transform(const TRotation& m)
TRotation Inverse() const
TRotation& Invert()
TRotation& Rotate(Double_t psi, const TVector3* p)
TClass* Class()
TClass* IsA() const
void ShowMembers(TMemberInspector& insp, char* parent)
void Streamer(TBuffer& b)
void StreamerNVirtual(TBuffer& b)
void ~TRotation()