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(TRotation&) TRotation operator*(TRotation&) TRotation Inverse() void ~TRotation() void AngleAxis(Double_t&, TVector3&) TClass* Class() TRotation& Invert() virtual TClass* IsA() Bool_t IsIdentity() Bool_t operator!=(TRotation& m) Double_t operator()(int, int) TVector3 operator*(TVector3& p) TRotation& operator*=(TRotation& m) TRotation& operator=(TRotation& m) Bool_t operator==(TRotation& m) TRotation::TRotationRow operator[](int i) Double_t PhiX() Double_t PhiY() Double_t PhiZ() TRotation& Rotate(Double_t, TVector3&) TRotation& Rotate(Double_t psi, TVector3* p) TRotation& RotateAxes(TVector3& newX, TVector3& newY, 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) Double_t ThetaX() Double_t ThetaY() Double_t ThetaZ() TRotation& Transform(TRotation& m) Double_t XX() Double_t XY() Double_t XZ() Double_t YX() Double_t YY() Double_t YZ() Double_t ZX() Double_t ZY() Double_t ZZ()Data Members
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/ * *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* /*
| 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.
There 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
| 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) = | cos(a) -sin(a) 0 |
| 0
0 1 |
and are implemented as member functions RotateX(), RotateY()
and RotateZ():
r.RotateX(TMath::Pi()); // rotation around the x-axis
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);
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();
r = r2 * r1;
| 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() Double_t XY() Double_t XZ() Double_t YX() Double_t YY() Double_t YZ() Double_t ZX() Double_t ZY() Double_t ZZ() TRotation::TRotationRow operator[](int i) Double_t operator()(int, int) TRotation& operator=(TRotation& m) Bool_t operator==(TRotation& m) Bool_t operator!=(TRotation& m) Bool_t IsIdentity() TVector3 operator*(TVector3& p) TRotation operator*(TRotation&) TRotation& operator*=(TRotation& m) TRotation& Transform(TRotation& m) TRotation Inverse() TRotation& Invert() TRotation& RotateX(Double_t) TRotation& RotateY(Double_t) TRotation& RotateZ(Double_t) TRotation& Rotate(Double_t, TVector3&) TRotation& Rotate(Double_t psi, TVector3* p) TRotation& RotateAxes(TVector3& newX, TVector3& newY, TVector3& newZ) TClass* Class() TClass* IsA() void ShowMembers(TMemberInspector& insp, char* parent) void Streamer(TBuffer& b) void ~TRotation()