Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
Vector3D.h
Go to the documentation of this file.
1// -*- C++ -*-
2// ---------------------------------------------------------------------------
3//
4// This file is a part of the CLHEP - a Class Library for High Energy Physics.
5//
6// History:
7// 09.09.96 E.Chernyaev - initial version
8// 12.06.01 E.Chernyaev - CLHEP-1.7: introduction of BasicVector3D to decouple
9// the functionality from CLHEP::Hep3Vector
10// 01.04.03 E.Chernyaev - CLHEP-1.9: template version
11//
12
13#ifndef HEP_VECTOR3D_H
14#define HEP_VECTOR3D_H
15
16#include <iosfwd>
19
20namespace HepGeom {
21
22 class Transform3D;
23
24 /**
25 * Geometrical 3D Vector.
26 * This is just a declaration of the class needed to define
27 * specializations Vector3D<float> and Vector3D<double>.
28 *
29 * @ingroup geometry
30 * @author Evgeni Chernyaev <[email protected]>
31 */
32 template<class T>
33 class Vector3D : public BasicVector3D<T> {};
34
35 /**
36 * Geometrical 3D Vector with components of float type.
37 *
38 * @author Evgeni Chernyaev <[email protected]>
39 * @ingroup geometry
40 */
41 template<>
42 class Vector3D<float> : public BasicVector3D<float> {
43 public:
44 /**
45 * Default constructor. */
46 Vector3D() = default;
47
48 /**
49 * Constructor from three numbers. */
50 Vector3D(float x1, float y1, float z1) : BasicVector3D<float>(x1,y1,z1) {}
51
52 /**
53 * Constructor from array of floats. */
54 explicit Vector3D(const float * a)
55 : BasicVector3D<float>(a[0],a[1],a[2]) {}
56
57 /**
58 * Copy constructor. */
59 Vector3D(const Vector3D<float> &) = default;
60
61 /**
62 * Move constructor. */
64
65 /**
66 * Constructor from BasicVector3D<float>. */
68
69 /**
70 * Destructor. */
71 ~Vector3D() = default;
72
73 /**
74 * Assignment. */
76
77 /**
78 * Assignment from BasicVector3D<float>. */
81 return *this;
82 }
83
84 /**
85 * Move assignment. */
87
88 /**
89 * Transformation by Transform3D. */
90 Vector3D<float> & transform(const Transform3D & m);
91 };
92
93 /**
94 * Transformation of Vector<float> by Transform3D.
95 * @relates Vector3D
96 */
98 operator*(const Transform3D & m, const Vector3D<float> & v);
99
100 /**
101 * Geometrical 3D Vector with components of double type.
102 *
103 * @author Evgeni Chernyaev <[email protected]>
104 * @ingroup geometry
105 */
106 template<>
107 class Vector3D<double> : public BasicVector3D<double> {
108 public:
109 /**
110 * Default constructor. */
111 Vector3D() = default;
112
113 /**
114 * Constructor from three numbers. */
115 Vector3D(double x1, double y1, double z1) : BasicVector3D<double>(x1,y1,z1) {}
116
117 /**
118 * Constructor from array of floats. */
119 explicit Vector3D(const float * a)
120 : BasicVector3D<double>(a[0],a[1],a[2]) {}
121
122 /**
123 * Constructor from array of doubles. */
124 explicit Vector3D(const double * a)
125 : BasicVector3D<double>(a[0],a[1],a[2]) {}
126
127 /**
128 * Copy constructor. */
129 Vector3D(const Vector3D<double> &) = default;
130
131 /**
132 * Move constructor. */
134
135 /**
136 * Constructor from BasicVector3D<float>. */
137 Vector3D(const BasicVector3D<float> & v) : BasicVector3D<double>(v) {}
138
139 /**
140 * Constructor from BasicVector3D<double>. */
142
143 /**
144 * Destructor. */
145 ~Vector3D() = default;
146
147 /**
148 * Constructor from CLHEP::Hep3Vector.
149 * This constructor is needed only for backward compatibility and
150 * in principle should be absent.
151 */
153 : BasicVector3D<double>(v.x(),v.y(),v.z()) {}
154
155 /**
156 * Conversion (cast) to CLHEP::Hep3Vector.
157 * This operator is needed only for backward compatibility and
158 * in principle should not exit.
159 */
160 operator CLHEP::Hep3Vector () const { return CLHEP::Hep3Vector(x(),y(),z()); }
161
162 /**
163 * Assignment. */
165
166 /**
167 * Assignment from BasicVector3D<float>. */
170 return *this;
171 }
172
173 /**
174 * Assignment from BasicVector3D<double>. */
177 return *this;
178 }
179
180 /**
181 * Move assignment. */
183
184 /**
185 * Transformation by Transform3D. */
186 Vector3D<double> & transform(const Transform3D & m);
187 };
188
189 /**
190 * Transformation of Vector<double> by Transform3D.
191 * @relates Vector3D
192 */
194 operator*(const Transform3D & m, const Vector3D<double> & v);
195
196} /* namespace HepGeom */
197
198#endif /* HEP_VECTOR3D_H */
BasicVector3D< T > & operator=(const BasicVector3D< T > &)=default
Vector3D(const CLHEP::Hep3Vector &v)
Definition: Vector3D.h:152
Vector3D(Vector3D< double > &&)=default
Vector3D< double > & operator=(const Vector3D< double > &)=default
Vector3D(const BasicVector3D< double > &v)
Definition: Vector3D.h:141
Vector3D< double > & operator=(const BasicVector3D< float > &v)
Definition: Vector3D.h:168
Vector3D(const BasicVector3D< float > &v)
Definition: Vector3D.h:137
Vector3D< double > & operator=(Vector3D< double > &&)=default
Vector3D(const double *a)
Definition: Vector3D.h:124
Vector3D< double > & operator=(const BasicVector3D< double > &v)
Definition: Vector3D.h:175
Vector3D(const float *a)
Definition: Vector3D.h:119
Vector3D(double x1, double y1, double z1)
Definition: Vector3D.h:115
Vector3D(const Vector3D< double > &)=default
Vector3D(float x1, float y1, float z1)
Definition: Vector3D.h:50
Vector3D< float > & operator=(const BasicVector3D< float > &v)
Definition: Vector3D.h:79
Vector3D(const BasicVector3D< float > &v)
Definition: Vector3D.h:67
Vector3D< float > & operator=(Vector3D< float > &&)=default
Vector3D(const float *a)
Definition: Vector3D.h:54
Vector3D< float > & operator=(const Vector3D< float > &)=default
Vector3D(const Vector3D< float > &)=default
Vector3D(Vector3D< float > &&)=default
Normal3D< float > operator*(const Transform3D &m, const Normal3D< float > &v)
Definition: Normal3D.cc:23