CLHEP VERSION Reference Documentation
   
CLHEP Home Page     CLHEP Documentation     CLHEP Bug Reports

CLHEP/Geometry/Point3D.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 // $Id: Point3D.h,v 1.5 2010/06/16 16:21:27 garren Exp $
3 // ---------------------------------------------------------------------------
4 //
5 // This file is a part of the CLHEP - a Class Library for High Energy Physics.
6 //
7 // History:
8 // 09.09.96 E.Chernyaev - initial version
9 // 12.06.01 E.Chernyaev - CLHEP-1.7: introduction of BasicVector3D to decouple
10 // the functionality from CLHEP::Hep3Vector
11 // 01.04.03 E.Chernyaev - CLHEP-1.9: template version
12 //
13 
14 #ifndef HEP_POINT3D_H
15 #define HEP_POINT3D_H
16 
17 #include <iosfwd>
18 #include "CLHEP/Geometry/defs.h"
19 #include "CLHEP/Vector/ThreeVector.h"
21 
22 namespace HepGeom {
23 
24  class Transform3D;
25 
34  template<class T>
35  class Point3D : public BasicVector3D<T> {};
36 
43  template<>
44  class Point3D<float> : public BasicVector3D<float> {
45  public:
48  Point3D() {}
49 
52  Point3D(float x1, float y1, float z1) : BasicVector3D<float>(x1,y1,z1) {}
53 
56  explicit Point3D(const float * a)
57  : BasicVector3D<float>(a[0],a[1],a[2]) {}
58 
61  Point3D(const Point3D<float> & v) : BasicVector3D<float>(v) {}
62 
65  Point3D(const BasicVector3D<float> & v) : BasicVector3D<float>(v) {}
66 
69  ~Point3D() {}
70 
74  set(v.x(),v.y(),v.z()); return *this;
75  }
76 
80  set(v.x(),v.y(),v.z()); return *this;
81  }
82 
85  float distance2() const { return mag2(); }
86 
89  float distance2(const Point3D<float> & p) const {
90  float dx = p.x()-x(), dy = p.y()-y(), dz = p.z()-z();
91  return dx*dx + dy*dy + dz*dz;
92  }
93 
96  float distance() const { return std::sqrt(distance2()); }
97 
100  float distance(const Point3D<float> & p) const {
101  return std::sqrt(distance2(p));
102  }
103 
106  Point3D<float> & transform(const Transform3D & m);
107  };
108 
113  Point3D<float>
114  operator*(const Transform3D & m, const Point3D<float> & p);
115 
122  template<>
123  class Point3D<double> : public BasicVector3D<double> {
124  public:
127  Point3D() {}
128 
131  Point3D(double x1, double y1, double z1) : BasicVector3D<double>(x1,y1,z1) {}
132 
135  explicit Point3D(const float * a)
136  : BasicVector3D<double>(a[0],a[1],a[2]) {}
137 
140  explicit Point3D(const double * a)
141  : BasicVector3D<double>(a[0],a[1],a[2]) {}
142 
146 
150 
154 
157  ~Point3D() {}
158 
165  : BasicVector3D<double>(v.x(),v.y(),v.z()) {}
166 
172  operator CLHEP::Hep3Vector () const { return CLHEP::Hep3Vector(x(),y(),z()); }
173 
177  set(v.x(),v.y(),v.z()); return *this;
178  }
179 
183  set(v.x(),v.y(),v.z()); return *this;
184  }
185 
189  set(v.x(),v.y(),v.z()); return *this;
190  }
191 
194  double distance2() const { return mag2(); }
195 
198  double distance2(const Point3D<double> & p) const {
199  double dx = p.x()-x(), dy = p.y()-y(), dz = p.z()-z();
200  return dx*dx + dy*dy + dz*dz;
201  }
202 
205  double distance() const { return std::sqrt(distance2()); }
206 
209  double distance(const Point3D<double> & p) const {
210  return std::sqrt(distance2(p));
211  }
212 
215  Point3D<double> & transform(const Transform3D & m);
216  };
217 
222  Point3D<double>
223  operator*(const Transform3D & m, const Point3D<double> & p);
224 
225 } /* namespace HepGeom */
226 
227 
228 #ifdef ENABLE_BACKWARDS_COMPATIBILITY
229 // backwards compatibility will be enabled ONLY in CLHEP 1.9
230 #include "CLHEP/config/CLHEP.h"
231 #include "CLHEP/Geometry/Normal3D.h"
234 #endif
235 
236 #endif /* HEP_POINT3D_H */