The TRotation class describes a rotation of objects of the TVector3 class.
It is a 3*3 matrix of Double_t:
It describes a so called 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 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:
The following matrices describe counterclockwise rotations around coordinate axes
and are implemented as member functions RotateX(), RotateY() and RotateZ():
The member function Rotate() allows to rotate around an arbitrary vector (not necessary a unit one) and returns the result.
It is possible to find a unit vector and an angle, which describe the same rotation as the current one:
Member function RotateAxes() adds a rotation of local axes to the current rotation and returns the result:
Member functions ThetaX(), ThetaY(), ThetaZ(), PhiX(), PhiY(),PhiZ() return azimuth and polar angles of the rotated axes:
The member function SetToIdentity() will set the rotation object to the identity (no rotation).
With a minor caveat, the Euler angles of the rotation may be set using SetXEulerAngles() or individually set with SetXPhi(), SetXTheta(), and SetXPsi(). These routines set the Euler angles using the X-convention which is defined by a rotation about the Z-axis, about the new X-axis, and about the new Z-axis. This is the convention used in Landau and Lifshitz, Goldstein and other common physics texts. The Y-convention Euler angles can be set with SetYEulerAngles(), SetYPhi(), SetYTheta(), and SetYPsi(). The caveat is that Euler angles usually define the rotation of the new coordinate system with respect to the original system, however, the TRotation class specifies the rotation of the object in the original system (an active rotation). To recover the usual Euler rotations (ie. rotate the system not the object), you must take the inverse of the rotation.
The member functions SetXAxis(), SetYAxis(), and SetZAxis() will create a rotation which rotates the requested axis of the object to be parallel to a vector. If used with one argument, the rotation about that axis is arbitrary. If used with two arguments, the second variable defines the XY, YZ, or ZX respectively.
The operator * has been implemented in a way that follows the mathematical notation of a product of the two matrices which describe the two consecutive rotations. Therefore the second rotation should be placed first:
The TRotation class provides an operator * which allows to express a rotation of a TVector3 analog to the mathematical notation
e.g.:
You can also use the Transform() member function or the operator *= of the TVector3 class:
Definition at line 20 of file TRotation.h.
Classes | |
class | TRotationRow |
Public Member Functions | |
TRotation () | |
Constructor. | |
TRotation (const TQuaternion &) | |
Constructor for a rotation based on a Quaternion if magnitude of quaternion is null, creates identity rotation if quaternion is non-unit, creates rotation corresponding to the normalized (unit) quaternion. | |
TRotation (const TRotation &) | |
Constructor. | |
virtual | ~TRotation () |
void | AngleAxis (Double_t &, TVector3 &) const |
Rotation defined by an angle and a vector. | |
Double_t | GetXPhi (void) const |
Return phi angle. | |
Double_t | GetXPsi (void) const |
Get psi angle. | |
Double_t | GetXTheta (void) const |
Return XTheta. | |
Double_t | GetYPhi (void) const |
Return YPhi. | |
Double_t | GetYPsi (void) const |
Return YPsi. | |
Double_t | GetYTheta (void) const |
Return YTheta. | |
TRotation | Inverse () const |
TRotation & | Invert () |
Bool_t | IsIdentity () const |
void | MakeBasis (TVector3 &xAxis, TVector3 &yAxis, TVector3 &zAxis) const |
Make the Z axis into a unit variable. | |
Bool_t | operator!= (const TRotation &) const |
Double_t | operator() (int, int) const |
Dereferencing operator const. | |
TRotation | operator* (const TRotation &) const |
Multiplication operator. | |
TVector3 | operator* (const TVector3 &) const |
TRotation & | operator*= (const TRotation &) |
TRotation & | operator= (const TRotation &) |
Bool_t | operator== (const TRotation &) const |
TRotationRow | operator[] (int) const |
Double_t | PhiX () const |
Return Phi. | |
Double_t | PhiY () const |
Return Phi. | |
Double_t | PhiZ () const |
Return Phi. | |
TRotation & | Rotate (Double_t, const TVector3 &) |
Rotate along an axis. | |
TRotation & | Rotate (Double_t, const TVector3 *) |
TRotation & | RotateAxes (const TVector3 &newX, const TVector3 &newY, const TVector3 &newZ) |
Rotate axes. | |
TRotation & | RotateX (Double_t) |
Rotate around x. | |
TRotation & | RotateXEulerAngles (Double_t phi, Double_t theta, Double_t psi) |
Rotate using the x-convention. | |
TRotation & | RotateY (Double_t) |
Rotate around y. | |
TRotation & | RotateYEulerAngles (Double_t phi, Double_t theta, Double_t psi) |
Rotate using the y-convention. | |
TRotation & | RotateZ (Double_t) |
Rotate around z. | |
TRotation & | SetToIdentity () |
TRotation & | SetXAxis (const TVector3 &axis) |
Set X axis. | |
TRotation & | SetXAxis (const TVector3 &axis, const TVector3 &xyPlane) |
Set X axis. | |
TRotation & | SetXEulerAngles (Double_t phi, Double_t theta, Double_t psi) |
Rotate using the x-convention (Landau and Lifshitz, Goldstein, &c) by doing the explicit rotations. | |
void | SetXPhi (Double_t) |
Set XPhi. | |
void | SetXPsi (Double_t) |
Set XPsi. | |
void | SetXTheta (Double_t) |
Set XTheta. | |
TRotation & | SetYAxis (const TVector3 &axis) |
Set Y axis. | |
TRotation & | SetYAxis (const TVector3 &axis, const TVector3 &yzPlane) |
Set Y axis. | |
TRotation & | SetYEulerAngles (Double_t phi, Double_t theta, Double_t psi) |
Rotate using the y-convention. | |
void | SetYPhi (Double_t) |
Set YPhi. | |
void | SetYPsi (Double_t) |
Set YPsi. | |
void | SetYTheta (Double_t) |
Set YTheta. | |
TRotation & | SetZAxis (const TVector3 &axis) |
Set Z axis. | |
TRotation & | SetZAxis (const TVector3 &axis, const TVector3 &zxPlane) |
Set Z axis. | |
Double_t | ThetaX () const |
Return Theta. | |
Double_t | ThetaY () const |
Return Theta. | |
Double_t | ThetaZ () const |
Return Theta. | |
TRotation & | Transform (const TRotation &) |
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 |
Public Member Functions inherited from TObject | |
TObject () | |
TObject constructor. | |
TObject (const TObject &object) | |
TObject copy ctor. | |
virtual | ~TObject () |
TObject destructor. | |
void | AbstractMethod (const char *method) const |
Use this method to implement an "abstract" method that you don't want to leave purely abstract. | |
virtual void | AppendPad (Option_t *option="") |
Append graphics object to current pad. | |
virtual void | Browse (TBrowser *b) |
Browse object. May be overridden for another default action. | |
ULong_t | CheckedHash () |
Check and record whether this class has a consistent Hash/RecursiveRemove setup (*) and then return the regular Hash value for this object. | |
virtual const char * | ClassName () const |
Returns name of class to which the object belongs. | |
virtual void | Clear (Option_t *="") |
virtual TObject * | Clone (const char *newname="") const |
Make a clone of an object using the Streamer facility. | |
virtual Int_t | Compare (const TObject *obj) const |
Compare abstract method. | |
virtual void | Copy (TObject &object) const |
Copy this to obj. | |
virtual void | Delete (Option_t *option="") |
Delete this object. | |
virtual Int_t | DistancetoPrimitive (Int_t px, Int_t py) |
Computes distance from point (px,py) to the object. | |
virtual void | Draw (Option_t *option="") |
Default Draw method for all objects. | |
virtual void | DrawClass () const |
Draw class inheritance tree of the class to which this object belongs. | |
virtual TObject * | DrawClone (Option_t *option="") const |
Draw a clone of this object in the current selected pad for instance with: gROOT->SetSelectedPad(gPad) . | |
virtual void | Dump () const |
Dump contents of object on stdout. | |
virtual void | Error (const char *method, const char *msgfmt,...) const |
Issue error message. | |
virtual void | Execute (const char *method, const char *params, Int_t *error=0) |
Execute method on this object with the given parameter string, e.g. | |
virtual void | Execute (TMethod *method, TObjArray *params, Int_t *error=0) |
Execute method on this object with parameters stored in the TObjArray. | |
virtual void | ExecuteEvent (Int_t event, Int_t px, Int_t py) |
Execute action corresponding to an event at (px,py). | |
virtual void | Fatal (const char *method, const char *msgfmt,...) const |
Issue fatal error message. | |
virtual TObject * | FindObject (const char *name) const |
Must be redefined in derived classes. | |
virtual TObject * | FindObject (const TObject *obj) const |
Must be redefined in derived classes. | |
virtual Option_t * | GetDrawOption () const |
Get option used by the graphics system to draw this object. | |
virtual const char * | GetIconName () const |
Returns mime type name of object. | |
virtual const char * | GetName () const |
Returns name of object. | |
virtual char * | GetObjectInfo (Int_t px, Int_t py) const |
Returns string containing info about the object at position (px,py). | |
virtual Option_t * | GetOption () const |
virtual const char * | GetTitle () const |
Returns title of object. | |
virtual UInt_t | GetUniqueID () const |
Return the unique object id. | |
virtual Bool_t | HandleTimer (TTimer *timer) |
Execute action in response of a timer timing out. | |
virtual ULong_t | Hash () const |
Return hash value for this object. | |
Bool_t | HasInconsistentHash () const |
Return true is the type of this object is known to have an inconsistent setup for Hash and RecursiveRemove (i.e. | |
virtual void | Info (const char *method, const char *msgfmt,...) const |
Issue info message. | |
virtual Bool_t | InheritsFrom (const char *classname) const |
Returns kTRUE if object inherits from class "classname". | |
virtual Bool_t | InheritsFrom (const TClass *cl) const |
Returns kTRUE if object inherits from TClass cl. | |
virtual void | Inspect () const |
Dump contents of this object in a graphics canvas. | |
void | InvertBit (UInt_t f) |
Bool_t | IsDestructed () const |
IsDestructed. | |
virtual Bool_t | IsEqual (const TObject *obj) const |
Default equal comparison (objects are equal if they have the same address in memory). | |
virtual Bool_t | IsFolder () const |
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects). | |
R__ALWAYS_INLINE Bool_t | IsOnHeap () const |
virtual Bool_t | IsSortable () const |
R__ALWAYS_INLINE Bool_t | IsZombie () const |
virtual void | ls (Option_t *option="") const |
The ls function lists the contents of a class on stdout. | |
void | MayNotUse (const char *method) const |
Use this method to signal that a method (defined in a base class) may not be called in a derived class (in principle against good design since a child class should not provide less functionality than its parent, however, sometimes it is necessary). | |
virtual Bool_t | Notify () |
This method must be overridden to handle object notification. | |
void | Obsolete (const char *method, const char *asOfVers, const char *removedFromVers) const |
Use this method to declare a method obsolete. | |
void | operator delete (void *ptr) |
Operator delete. | |
void | operator delete[] (void *ptr) |
Operator delete []. | |
void * | operator new (size_t sz) |
void * | operator new (size_t sz, void *vp) |
void * | operator new[] (size_t sz) |
void * | operator new[] (size_t sz, void *vp) |
TObject & | operator= (const TObject &rhs) |
TObject assignment operator. | |
virtual void | Paint (Option_t *option="") |
This method must be overridden if a class wants to paint itself. | |
virtual void | Pop () |
Pop on object drawn in a pad to the top of the display list. | |
virtual void | Print (Option_t *option="") const |
This method must be overridden when a class wants to print itself. | |
virtual Int_t | Read (const char *name) |
Read contents of object with specified name from the current directory. | |
virtual void | RecursiveRemove (TObject *obj) |
Recursively remove this object from a list. | |
void | ResetBit (UInt_t f) |
virtual void | SaveAs (const char *filename="", Option_t *option="") const |
Save this object in the file specified by filename. | |
virtual void | SavePrimitive (std::ostream &out, Option_t *option="") |
Save a primitive as a C++ statement(s) on output stream "out". | |
void | SetBit (UInt_t f) |
void | SetBit (UInt_t f, Bool_t set) |
Set or unset the user status bits as specified in f. | |
virtual void | SetDrawOption (Option_t *option="") |
Set drawing option for object. | |
virtual void | SetUniqueID (UInt_t uid) |
Set the unique object id. | |
virtual void | SysError (const char *method, const char *msgfmt,...) const |
Issue system error message. | |
R__ALWAYS_INLINE Bool_t | TestBit (UInt_t f) const |
Int_t | TestBits (UInt_t f) const |
virtual void | UseCurrentStyle () |
Set current style settings in this object This function is called when either TCanvas::UseCurrentStyle or TROOT::ForceStyle have been invoked. | |
virtual void | Warning (const char *method, const char *msgfmt,...) const |
Issue warning message. | |
virtual Int_t | Write (const char *name=0, Int_t option=0, Int_t bufsize=0) |
Write this object to the current directory. | |
virtual Int_t | Write (const char *name=0, Int_t option=0, Int_t bufsize=0) const |
Write this object to the current directory. | |
Protected Member Functions | |
TRotation (Double_t, Double_t, Double_t, Double_t, Double_t, Double_t, Double_t, Double_t, Double_t) | |
Constructor. | |
Protected Member Functions inherited from TObject | |
virtual void | DoError (int level, const char *location, const char *fmt, va_list va) const |
Interface to ErrorHandler (protected). | |
void | MakeZombie () |
Protected Attributes | |
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 |
Additional Inherited Members | |
Public Types inherited from TObject | |
enum | { kIsOnHeap = 0x01000000 , kNotDeleted = 0x02000000 , kZombie = 0x04000000 , kInconsistent = 0x08000000 , kBitMask = 0x00ffffff } |
enum | { kSingleKey = BIT(0) , kOverwrite = BIT(1) , kWriteDelete = BIT(2) } |
enum | EDeprecatedStatusBits { kObjInCanvas = BIT(3) } |
enum | EStatusBits { kCanDelete = BIT(0) , kMustCleanup = BIT(3) , kIsReferenced = BIT(4) , kHasUUID = BIT(5) , kCannotPick = BIT(6) , kNoContextMenu = BIT(8) , kInvalidObject = BIT(13) } |
Static Public Member Functions inherited from TObject | |
static Longptr_t | GetDtorOnly () |
Return destructor only flag. | |
static Bool_t | GetObjectStat () |
Get status of object stat flag. | |
static void | SetDtorOnly (void *obj) |
Set destructor only flag. | |
static void | SetObjectStat (Bool_t stat) |
Turn on/off tracking of objects in the TObjectTable. | |
Protected Types inherited from TObject | |
enum | { kOnlyPrepStep = BIT(3) } |
#include <TRotation.h>
TRotation::TRotation | ( | ) |
Constructor.
Definition at line 195 of file TRotation.cxx.
TRotation::TRotation | ( | const TRotation & | m | ) |
Constructor.
Definition at line 202 of file TRotation.cxx.
TRotation::TRotation | ( | const TQuaternion & | Q | ) |
Constructor for a rotation based on a Quaternion if magnitude of quaternion is null, creates identity rotation if quaternion is non-unit, creates rotation corresponding to the normalized (unit) quaternion.
Definition at line 258 of file TRotation.cxx.
|
inlinevirtual |
Definition at line 44 of file TRotation.h.
|
protected |
Constructor.
Definition at line 209 of file TRotation.cxx.
Rotation defined by an angle and a vector.
Definition at line 462 of file TRotation.cxx.
Return phi angle.
Definition at line 578 of file TRotation.cxx.
Get psi angle.
Definition at line 644 of file TRotation.cxx.
Return XTheta.
Definition at line 630 of file TRotation.cxx.
Return YPhi.
Definition at line 623 of file TRotation.cxx.
Return YPsi.
Definition at line 690 of file TRotation.cxx.
Return YTheta.
Definition at line 637 of file TRotation.cxx.
|
inline |
Definition at line 271 of file TRotation.h.
|
inline |
Definition at line 275 of file TRotation.h.
|
inline |
Definition at line 245 of file TRotation.h.
Make the Z axis into a unit variable.
Definition at line 766 of file TRotation.cxx.
Definition at line 239 of file TRotation.h.
Dereferencing operator const.
Definition at line 218 of file TRotation.cxx.
Multiplication operator.
Definition at line 241 of file TRotation.cxx.
Definition at line 257 of file TRotation.h.
Definition at line 263 of file TRotation.h.
Definition at line 220 of file TRotation.h.
Definition at line 233 of file TRotation.h.
|
inline |
Definition at line 216 of file TRotation.h.
Double_t TRotation::PhiX | ( | ) | const |
Return Phi.
Definition at line 420 of file TRotation.cxx.
Double_t TRotation::PhiY | ( | ) | const |
Return Phi.
Definition at line 427 of file TRotation.cxx.
Double_t TRotation::PhiZ | ( | ) | const |
Return Phi.
Definition at line 434 of file TRotation.cxx.
Rotate along an axis.
Definition at line 324 of file TRotation.cxx.
Definition at line 279 of file TRotation.h.
TRotation & TRotation::RotateAxes | ( | const TVector3 & | newX, |
const TVector3 & | newY, | ||
const TVector3 & | newZ | ||
) |
Rotate axes.
Definition at line 393 of file TRotation.cxx.
Rotate around x.
Definition at line 345 of file TRotation.cxx.
Rotate using the x-convention.
Definition at line 514 of file TRotation.cxx.
Rotate around y.
Definition at line 361 of file TRotation.cxx.
Rotate using the y-convention.
Definition at line 525 of file TRotation.cxx.
Rotate around z.
Definition at line 377 of file TRotation.cxx.
|
inline |
Definition at line 251 of file TRotation.h.
Set X axis.
Definition at line 712 of file TRotation.cxx.
Set X axis.
Definition at line 697 of file TRotation.cxx.
Rotate using the x-convention (Landau and Lifshitz, Goldstein, &c) by doing the explicit rotations.
This is slightly less efficient than directly applying the rotation, but makes the code much clearer. My presumption is that this code is not going to be a speed bottle neck.
Definition at line 487 of file TRotation.cxx.
Set XPhi.
Definition at line 536 of file TRotation.cxx.
Set XPsi.
Definition at line 550 of file TRotation.cxx.
Set XTheta.
Definition at line 543 of file TRotation.cxx.
Set Y axis.
Definition at line 735 of file TRotation.cxx.
Set Y axis.
Definition at line 720 of file TRotation.cxx.
Rotate using the y-convention.
Definition at line 501 of file TRotation.cxx.
Set YPhi.
Definition at line 557 of file TRotation.cxx.
Set YPsi.
Definition at line 571 of file TRotation.cxx.
Set YTheta.
Definition at line 564 of file TRotation.cxx.
Set Z axis.
Definition at line 758 of file TRotation.cxx.
Set Z axis.
Definition at line 743 of file TRotation.cxx.
Double_t TRotation::ThetaX | ( | ) | const |
Return Theta.
Definition at line 441 of file TRotation.cxx.
Double_t TRotation::ThetaY | ( | ) | const |
Return Theta.
Definition at line 448 of file TRotation.cxx.
Double_t TRotation::ThetaZ | ( | ) | const |
Return Theta.
Definition at line 455 of file TRotation.cxx.
Definition at line 267 of file TRotation.h.
|
inline |
Definition at line 190 of file TRotation.h.
|
inline |
Definition at line 191 of file TRotation.h.
|
inline |
Definition at line 192 of file TRotation.h.
|
inline |
Definition at line 193 of file TRotation.h.
|
inline |
Definition at line 194 of file TRotation.h.
|
inline |
Definition at line 195 of file TRotation.h.
|
inline |
Definition at line 196 of file TRotation.h.
|
inline |
Definition at line 197 of file TRotation.h.
|
inline |
Definition at line 198 of file TRotation.h.
|
protected |
Definition at line 182 of file TRotation.h.
|
protected |
Definition at line 182 of file TRotation.h.
|
protected |
Definition at line 182 of file TRotation.h.
|
protected |
Definition at line 182 of file TRotation.h.
|
protected |
Definition at line 182 of file TRotation.h.
|
protected |
Definition at line 182 of file TRotation.h.
|
protected |
Definition at line 182 of file TRotation.h.
|
protected |
Definition at line 182 of file TRotation.h.
|
protected |
Definition at line 182 of file TRotation.h.