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
22namespace 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:
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
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:
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
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"
234#endif
235
236#endif /* HEP_POINT3D_H */
double distance2(const Point3D< double > &p) const
double distance(const Point3D< double > &p) const
Point3D(const BasicVector3D< double > &v)
Point3D< double > & operator=(const Point3D< double > &v)
Point3D(const BasicVector3D< float > &v)
Point3D(double x1, double y1, double z1)
Point3D(const Point3D< double > &v)
Point3D< double > & operator=(const BasicVector3D< double > &v)
Point3D< double > & operator=(const BasicVector3D< float > &v)
Point3D(const CLHEP::Hep3Vector &v)
Point3D< float > & operator=(const BasicVector3D< float > &v)
float distance2(const Point3D< float > &p) const
Point3D(const Point3D< float > &v)
Point3D< float > & operator=(const Point3D< float > &v)
Point3D(float x1, float y1, float z1)
Point3D(const BasicVector3D< float > &v)
float distance(const Point3D< float > &p) const
#define double(obj)
Definition: excDblThrow.cc:32
Normal3D< float > operator*(const Transform3D &m, const Normal3D< float > &v)
Definition: Normal3D.cc:25
HepGeom::Point3D< double > HepPoint3D
Definition: testBug6740.cc:9
@ a