OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
Vector3D.h
Go to the documentation of this file.
1#ifndef OPALX_Vector3D_HH
2#define OPALX_Vector3D_HH
3
4// ------------------------------------------------------------------------
5// $RCSfile: Vector3D.h,v $
6// ------------------------------------------------------------------------
7// $Revision: 1.1.1.1 $
8// ------------------------------------------------------------------------
9// Copyright: see Copyright.readme
10// ------------------------------------------------------------------------
11//
12// Class: Vector3D
13//
14// ------------------------------------------------------------------------
15// Class category: BeamlineGeometry
16// ------------------------------------------------------------------------
17//
18// $Date: 2000/03/27 09:32:34 $
19// $Author: fci $
20//
21// ------------------------------------------------------------------------
22
23// Class Vector3D
24// ------------------------------------------------------------------------
26// The copy constructor, destructor, and assignment operator generated
27// by the compiler perform the correct operation. For speed reasons they
28// are not implemented.
29
30class Vector3D {
31public:
33 // Construct null vector.
34 Vector3D();
35
37 // Use components (x,y,z).
38 Vector3D(double x, double y, double z);
39
40 bool operator==(const Vector3D&) const;
41 bool operator!=(const Vector3D&) const;
42
44 Vector3D& operator+=(const Vector3D& vector);
45
47 Vector3D& operator-=(const Vector3D& vector);
48
50 Vector3D& operator*=(double factor);
51
53 Vector3D operator-() const;
54
56 // Return a reference to component [b]i[/b].
57 double& operator()(int i);
58
60 // Return the value of component [b]i[/b].
61 double operator()(int i) const;
62
64 // Return the components (x,y,z).
65 void getComponents(double& x, double& y, double& z) const;
66
68 // Return the component [b]x[/b].
69 double getX() const;
70
72 // Return the component [b]y[/b].
73 double getY() const;
74
76 // Return the component [b]z[/b].
77 double getZ() const;
78
80 void clear();
81
83 bool isZero() const;
84
86 // Assign the component [b]x[/b].
87 void setX(double);
88
90 // Assign the component [b]y[/b].
91 void setY(double);
92
94 // Assign the component [b]z[/b].
95 void setZ(double);
96
97protected:
98 // Vector components.
99 double v[3];
100};
101
102// External functions.
103// ------------------------------------------------------------------------
104
106extern Vector3D operator+(const Vector3D& a, const Vector3D& b);
107
109extern Vector3D operator-(const Vector3D& a, const Vector3D& b);
110
112extern Vector3D operator*(const Vector3D& a, double factor);
113
115extern Vector3D operator*(double factor, const Vector3D& a);
116
118extern Vector3D cross(const Vector3D& a, const Vector3D& b);
119
121extern double dot(const Vector3D& a, const Vector3D& b);
122
123// Inline functions.
124// ------------------------------------------------------------------------
125
126inline Vector3D::Vector3D() { v[0] = v[1] = v[2] = 0.0; }
127
128inline double& Vector3D::operator()(int i) { return v[i]; }
129
130inline double Vector3D::operator()(int i) const { return v[i]; }
131
132inline double Vector3D::getX() const { return v[0]; }
133
134inline double Vector3D::getY() const { return v[1]; }
135
136inline double Vector3D::getZ() const { return v[2]; }
137
138inline void Vector3D::setX(double x) { v[0] = x; }
139
140inline void Vector3D::setY(double y) { v[1] = y; }
141
142inline void Vector3D::setZ(double z) { v[2] = z; }
143
144#endif // OPALX_Vector3D_HH
Vector3D cross(const Vector3D &a, const Vector3D &b)
Vector cross product.
Definition Vector3D.cpp:89
Vector3D operator+(const Vector3D &a, const Vector3D &b)
Add.
Definition Vector3D.cpp:63
double dot(const Vector3D &a, const Vector3D &b)
Vector dot product.
Definition Vector3D.cpp:95
Vector3D operator-(const Vector3D &a, const Vector3D &b)
Subtract.
Definition Vector3D.cpp:67
Vector3D operator*(const Vector3D &a, double factor)
Multiply.
Definition Vector3D.cpp:71
A 3-dimension vector.
Definition Vector3D.h:30
void setY(double)
Set component.
Definition Vector3D.h:140
Vector3D()
Default constructor.
Definition Vector3D.h:126
bool operator!=(const Vector3D &) const
Definition Vector3D.cpp:57
void clear()
Set to zero.
Definition Vector3D.cpp:79
Vector3D & operator-=(const Vector3D &vector)
Subtract and assign.
Definition Vector3D.cpp:39
void setX(double)
Set component.
Definition Vector3D.h:138
double getY() const
Get component.
Definition Vector3D.h:134
Vector3D & operator*=(double factor)
Scale and assign.
Definition Vector3D.cpp:46
void setZ(double)
Set component.
Definition Vector3D.h:142
void getComponents(double &x, double &y, double &z) const
Get components.
Definition Vector3D.cpp:81
double getX() const
Get component.
Definition Vector3D.h:132
bool operator==(const Vector3D &) const
Definition Vector3D.cpp:53
Vector3D & operator+=(const Vector3D &vector)
Add and assign.
Definition Vector3D.cpp:32
bool isZero() const
Test for zero.
Definition Vector3D.cpp:87
double getZ() const
Get component.
Definition Vector3D.h:136
double v[3]
Definition Vector3D.h:99
double & operator()(int i)
Get component.
Definition Vector3D.h:128
Vector3D operator-() const
Negative vector.
Definition Vector3D.cpp:61