Vector.h
Go to the documentation of this file.
1 
10 #ifndef _utl_Vector_h_
11 #define _utl_Vector_h_
12 
13 #include <utl/BasicVector.h>
14 #include <utl/CoordinateSystem.h>
15 
16 
17 namespace utl {
18 
19  class Point;
20  class AxialVector;
21 
22 
30  class Vector : public VectorBase {
31 
32  public:
33  Vector() : VectorBase() { }
34 
36  Vector(const double x, const double y, const double z,
37  const CoordinateSystemPtr& theCoordinateSystem)
38  : VectorBase(x, y, z, theCoordinateSystem)
39  { }
40 
42  Vector(const double p1, const double p2, const double p3,
43  const CoordinateSystemPtr& theCoordinateSystem,
44  const CoordinateType& theType)
45  : VectorBase(p1, p2, p3, theCoordinateSystem, theType)
46  { }
47 
49  Vector operator-() const
50  { return Vector(-fVector, fCoordinateSystem); }
51 
53  { v.TransformTo(fCoordinateSystem); fVector += v.fVector; return *this; }
54 
56  { v.TransformTo(fCoordinateSystem); fVector -= v.fVector; return *this; }
57 
58  double GetMag() const
59  { return fVector.mag(); }
60 
61  double GetMag2() const
62  { return fVector.mag2(); }
63 
65 
66  explicit operator bool() const { return fVector.x() || fVector.y() || fVector.z(); }
67 
68  private:
70 
71  Vector(const VectorBase::DataType& theVector,
72  const CoordinateSystemPtr& theCoordinateSystem)
73  : VectorBase(theVector, theCoordinateSystem)
74  { }
75 
76  friend class TransformationPolicy;
77 
78  friend class AxialVector;
79 
80  friend Vector operator+(const Vector& l, const Vector& r);
81  friend Vector operator-(const Vector& l, const Vector& r);
82  friend Vector operator*(const Vector& v, const double a);
83  friend Vector operator*(const double a, const Vector& v);
84  friend Vector operator/(const Vector& l, const double a);
85  friend double operator*(const Vector& l, const Vector& r);
86 
87  friend Point operator+(const Point& l, const Vector& r);
88  friend Point operator+(const Vector& l, const Point& r);
89  friend Point operator-(const Point& l, const Vector& r);
90  friend Vector operator-(const Point& l, const Point& r);
91 
92  friend Point& operator+=(Point& p, const Vector& v);
93  friend Point& operator-=(Point& p, const Vector& v);
94 
95  friend AxialVector Cross(const Vector& l, const Vector& r);
96 
97  };
98 
99 
100  inline
101  Vector
102  Normalized(const Vector& v)
103  {
104  Vector vv = v;
105  vv.Normalize();
106  return vv;
107  }
108 
109 }
110 
111 
112 #include <utl/OperationsVV.h>
113 #ifdef _utl_Point_h_
114 # include <utl/OperationsPV.h>
115 #endif
116 
117 
118 #endif
friend AxialVector Cross(const Vector &l, const Vector &r)
Definition: OperationsAV.h:25
void Normalize()
Definition: Vector.h:64
HepVector DataType
Definition: BasicVector.h:45
Point object.
Definition: Point.h:32
void Normalize()
normalize the vector
Definition: BasicVector.h:354
double GetMag() const
Definition: Vector.h:58
Vector(const double p1, const double p2, const double p3, const CoordinateSystemPtr &theCoordinateSystem, const CoordinateType &theType)
Construct a vector from arbitraty representation.
Definition: Vector.h:42
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
Vector(const double x, const double y, const double z, const CoordinateSystemPtr &theCoordinateSystem)
Construct vector from coordinates in a given coordinate system.
Definition: Vector.h:36
Vector & operator-=(const Vector &v)
Definition: Vector.h:55
Basic vector class template for geometry.
Definition: BasicVector.h:42
DataType fVector
Definition: BasicVector.h:360
Vector(const VectorBase::DataType &theVector, const CoordinateSystemPtr &theCoordinateSystem)
Constructor from internal components for use by operators.
Definition: Vector.h:71
friend Vector operator+(const Vector &l, const Vector &r)
Definition: OperationsVV.h:20
Vector & operator+=(const Vector &v)
Definition: Vector.h:52
AxialVector Normalized(const AxialVector &v)
Definition: AxialVector.h:81
Vector operator-() const
Unary minus.
Definition: Vector.h:49
friend Vector operator*(const Vector &v, const double a)
Definition: OperationsVV.h:46
CoordinateSystemPtr fCoordinateSystem
Definition: BasicVector.h:359
friend Vector operator/(const Vector &l, const double a)
Definition: OperationsVV.h:54
Base class for classes indicating coordinate types.
Definition: BasicVector.h:48
Vector object.
Definition: Vector.h:30
AxialVector object.
Definition: AxialVector.h:30
Vector()
Definition: Vector.h:33
double GetMag2() const
Definition: Vector.h:61

, generated on Tue Sep 26 2023.