TVector2.h

Go to the documentation of this file.
00001 // @(#)root/physics:$Id: TVector2.h 20882 2007-11-19 11:31:26Z rdm $
00002 // Author: Pasha Murat   12/02/99
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 #ifndef ROOT_TVector2
00013 #define ROOT_TVector2
00014 
00015 #include "TObject.h"
00016 
00017 
00018 class TVector2 : public TObject {
00019 //------------------------------------------------------------------------------
00020 //  data members
00021 //------------------------------------------------------------------------------
00022 protected:
00023 
00024    Double_t    fX;    // components of the vector
00025    Double_t    fY;
00026 //------------------------------------------------------------------------------
00027 //  function members
00028 //------------------------------------------------------------------------------
00029 public:
00030 
00031    TVector2 ();
00032    TVector2 (Double_t *s);
00033    TVector2 (Double_t x0, Double_t y0);
00034    virtual ~TVector2();
00035                                         // ****** unary operators
00036 
00037    TVector2&       operator  = (TVector2 const & v);
00038    TVector2&       operator += (TVector2 const & v);
00039    TVector2&       operator -= (TVector2 const & v);
00040    Double_t        operator *= (TVector2 const & v);
00041    TVector2&       operator *= (Double_t s);
00042    TVector2&       operator /= (Double_t s);
00043 
00044                                         // ****** binary operators
00045 
00046    friend TVector2       operator + (const TVector2&, const TVector2&);
00047    friend TVector2       operator + (const TVector2&, Double_t  );
00048    friend TVector2       operator + (Double_t  , const TVector2&);
00049    friend TVector2       operator - (const TVector2&, const TVector2&);
00050    friend TVector2       operator - (const TVector2&, Double_t  );
00051    friend Double_t       operator * (const TVector2&, const TVector2&);
00052    friend TVector2       operator * (const TVector2&, Double_t  );
00053    friend TVector2       operator * (Double_t  , const TVector2&);
00054    friend TVector2       operator / (const TVector2&, Double_t  );
00055    friend Double_t       operator ^ (const TVector2&, const TVector2&);
00056 
00057                                         // ****** setters
00058    void Set(const TVector2& v);
00059    void Set(Double_t x0, Double_t y0);
00060    void Set(float  x0, float  y0);
00061 
00062                                         // ****** other member functions
00063 
00064    Double_t Mod2() const { return fX*fX+fY*fY; };
00065    Double_t Mod () const;
00066 
00067    Double_t Px()   const { return fX; };
00068    Double_t Py()   const { return fY; };
00069    Double_t X ()   const { return fX; };
00070    Double_t Y ()   const { return fY; };
00071 
00072                                         // phi() is defined in [0,TWOPI]
00073 
00074    Double_t Phi           () const;
00075    Double_t DeltaPhi(const TVector2& v) const;
00076    void     SetMagPhi(Double_t mag, Double_t phi);
00077 
00078                                         // unit vector in the direction of *this
00079 
00080    TVector2 Unit() const;
00081    TVector2 Ort () const;
00082 
00083                                         // projection of *this to the direction
00084                                         // of TVector2 vector `v'
00085 
00086    TVector2 Proj(const TVector2& v) const;
00087 
00088                                         // component of *this normal to `v'
00089 
00090    TVector2 Norm(const TVector2& v) const;
00091 
00092                                         // rotates 2-vector by phi radians
00093    TVector2 Rotate (Double_t phi) const;
00094 
00095                                         // returns phi angle in the interval [0,2*PI)
00096    static Double_t Phi_0_2pi(Double_t x);                                                                               // returns phi angle in the interval
00097                                         // returns phi angle in the interval [-PI,PI)
00098    static Double_t Phi_mpi_pi(Double_t x);
00099 
00100 
00101    void Print(Option_t* option="") const;
00102 
00103    ClassDef(TVector2,3)  // A 2D physics vector
00104 
00105 };
00106 
00107                                         // ****** unary operators
00108 
00109 inline TVector2& TVector2::operator  = (TVector2 const& v) {fX  = v.fX; fY  = v.fY; return *this;}
00110 inline TVector2& TVector2::operator += (TVector2 const& v) {fX += v.fX; fY += v.fY; return *this;}
00111 inline TVector2& TVector2::operator -= (TVector2 const& v) {fX -= v.fX; fY -= v.fY; return *this;}
00112 
00113                                         // scalar product of 2 2-vectors
00114 
00115 inline Double_t   TVector2::operator *= (const TVector2& v) { return(fX*v.fX+fY*v.fY); }
00116 
00117 inline TVector2& TVector2::operator *= (Double_t s) { fX *=s; fY *=s; return *this; }
00118 inline TVector2& TVector2::operator /= (Double_t s) { fX /=s; fY /=s; return *this; }
00119 
00120                                         // ****** binary operators
00121 
00122 inline TVector2  operator + (const TVector2& v1, const TVector2& v2) {
00123    return TVector2(v1.fX+v2.fX,v1.fY+v2.fY);
00124 }
00125 
00126 inline TVector2  operator + (const TVector2& v1, Double_t bias) {
00127    return TVector2 (v1.fX+bias,v1.fY+bias);
00128 }
00129 
00130 inline TVector2  operator + (Double_t bias, const TVector2& v1) {
00131    return TVector2 (v1.fX+bias,v1.fY+bias);
00132 }
00133 
00134 inline TVector2  operator - (const TVector2& v1, const TVector2& v2) {
00135    return TVector2(v1.fX-v2.fX,v1.fY-v2.fY);
00136 }
00137 
00138 inline TVector2  operator - (const TVector2& v1, Double_t bias) {
00139    return TVector2 (v1.fX-bias,v1.fY-bias);
00140 }
00141 
00142 inline TVector2  operator * (const TVector2& v, Double_t s) {
00143    return TVector2 (v.fX*s,v.fY*s);
00144 }
00145 
00146 inline TVector2    operator * (Double_t s, const TVector2& v) {
00147    return TVector2 (v.fX*s,v.fY*s);
00148 }
00149 
00150 inline Double_t operator * (const TVector2& v1, const TVector2& v2) {
00151    return  v1.fX*v2.fX+v1.fY*v2.fY;
00152 }
00153 
00154 inline TVector2     operator / (const TVector2& v, Double_t s) {
00155    return TVector2 (v.fX/s,v.fY/s);
00156 }
00157 
00158 inline Double_t   operator ^ (const TVector2& v1, const TVector2& v2) {
00159    return  v1.fX*v2.fY-v1.fY*v2.fX;
00160 }
00161 
00162 inline  Double_t TVector2::DeltaPhi(const TVector2& v) const { return Phi_mpi_pi(Phi()-v.Phi()); }
00163 
00164 inline  TVector2 TVector2::Ort () const { return Unit(); }
00165 
00166 inline  TVector2 TVector2::Proj(const TVector2& v) const { return v*(((*this)*v)/v.Mod2()); }
00167 
00168 inline  TVector2 TVector2::Norm(const TVector2& v) const {return *this-Proj(v); }
00169 
00170                                      // ****** setters
00171 
00172 inline void TVector2::Set(const TVector2& v   )     { fX = v.fX; fY = v.fY; }
00173 inline void TVector2::Set(Double_t x0, Double_t y0) { fX = x0  ; fY = y0 ;  }
00174 inline void TVector2::Set(float  x0, float  y0)     { fX = x0  ; fY = y0 ;  }
00175 
00176 #endif

Generated on Tue Jul 5 14:28:21 2011 for ROOT_528-00b_version by  doxygen 1.5.1