18 class TVector2 :
public TObject {
31 typedef Double_t Scalar;
34 TVector2 (Double_t *s);
35 TVector2 (Double_t x0, Double_t y0);
39 TVector2& operator = (TVector2
const & v);
40 TVector2& operator += (TVector2
const & v);
41 TVector2& operator -= (TVector2
const & v);
42 Double_t operator *= (TVector2
const & v);
43 TVector2& operator *= (Double_t s);
44 TVector2& operator /= (Double_t s);
48 friend TVector2 operator + (
const TVector2&,
const TVector2&);
49 friend TVector2 operator + (
const TVector2&, Double_t );
50 friend TVector2 operator + (Double_t ,
const TVector2&);
51 friend TVector2 operator - (
const TVector2&,
const TVector2&);
52 friend TVector2 operator - (
const TVector2&, Double_t );
53 friend Double_t operator * (
const TVector2&,
const TVector2&);
54 friend TVector2 operator * (
const TVector2&, Double_t );
55 friend TVector2 operator * (Double_t ,
const TVector2&);
56 friend TVector2 operator / (
const TVector2&, Double_t );
57 friend Double_t operator ^ (
const TVector2&,
const TVector2&);
60 void Set(
const TVector2& v);
61 void Set(Double_t x0, Double_t y0);
62 void Set(
float x0,
float y0);
63 void SetX(Double_t x0);
64 void SetY(Double_t y0);
67 Double_t Mod2()
const {
return fX*fX+fY*fY; };
68 Double_t Mod ()
const;
70 Double_t Px()
const {
return fX; };
71 Double_t Py()
const {
return fY; };
72 Double_t X ()
const {
return fX; };
73 Double_t Y ()
const {
return fY; };
77 Double_t Phi ()
const;
78 Double_t DeltaPhi(
const TVector2& v)
const;
79 void SetMagPhi(Double_t mag, Double_t phi);
83 TVector2 Unit()
const;
84 TVector2 Ort ()
const;
89 TVector2 Proj(
const TVector2& v)
const;
93 TVector2 Norm(
const TVector2& v)
const;
96 TVector2 Rotate (Double_t phi)
const;
99 static Double_t Phi_0_2pi(Double_t x);
102 static Double_t Phi_mpi_pi(Double_t x);
105 void Print(Option_t* option=
"")
const;
113 inline TVector2& TVector2::operator = (TVector2
const& v) {fX = v.fX; fY = v.fY;
return *
this;}
114 inline TVector2& TVector2::operator += (TVector2
const& v) {fX += v.fX; fY += v.fY;
return *
this;}
115 inline TVector2& TVector2::operator -= (TVector2
const& v) {fX -= v.fX; fY -= v.fY;
return *
this;}
119 inline Double_t TVector2::operator *= (
const TVector2& v) {
return(fX*v.fX+fY*v.fY); }
121 inline TVector2& TVector2::operator *= (Double_t s) { fX *=s; fY *=s;
return *
this; }
122 inline TVector2& TVector2::operator /= (Double_t s) { fX /=s; fY /=s;
return *
this; }
126 inline TVector2 operator + (
const TVector2& v1,
const TVector2& v2) {
127 return TVector2(v1.fX+v2.fX,v1.fY+v2.fY);
130 inline TVector2 operator + (
const TVector2& v1, Double_t bias) {
131 return TVector2 (v1.fX+bias,v1.fY+bias);
134 inline TVector2 operator + (Double_t bias,
const TVector2& v1) {
135 return TVector2 (v1.fX+bias,v1.fY+bias);
138 inline TVector2 operator - (
const TVector2& v1,
const TVector2& v2) {
139 return TVector2(v1.fX-v2.fX,v1.fY-v2.fY);
142 inline TVector2 operator - (
const TVector2& v1, Double_t bias) {
143 return TVector2 (v1.fX-bias,v1.fY-bias);
146 inline TVector2 operator * (
const TVector2& v, Double_t s) {
147 return TVector2 (v.fX*s,v.fY*s);
150 inline TVector2 operator * (Double_t s,
const TVector2& v) {
151 return TVector2 (v.fX*s,v.fY*s);
154 inline Double_t operator * (
const TVector2& v1,
const TVector2& v2) {
155 return v1.fX*v2.fX+v1.fY*v2.fY;
158 inline TVector2 operator / (
const TVector2& v, Double_t s) {
159 return TVector2 (v.fX/s,v.fY/s);
162 inline Double_t operator ^ (
const TVector2& v1,
const TVector2& v2) {
163 return v1.fX*v2.fY-v1.fY*v2.fX;
166 inline Double_t TVector2::DeltaPhi(
const TVector2& v)
const {
return Phi_mpi_pi(Phi()-v.Phi()); }
168 inline TVector2 TVector2::Ort ()
const {
return Unit(); }
170 inline TVector2 TVector2::Proj(
const TVector2& v)
const {
return v*(((*this)*v)/v.Mod2()); }
172 inline TVector2 TVector2::Norm(
const TVector2& v)
const {
return *
this-Proj(v); }
176 inline void TVector2::Set(
const TVector2& v ) { fX = v.fX; fY = v.fY; }
177 inline void TVector2::Set(Double_t x0, Double_t y0) { fX = x0 ; fY = y0 ; }
178 inline void TVector2::Set(
float x0,
float y0) { fX = x0 ; fY = y0 ; }
179 inline void TVector2::SetX(Double_t x0) { fX = x0 ; }
180 inline void TVector2::SetY(Double_t y0) { fY = y0 ; }