geometry.hpp
Go to the documentation of this file.
1 
6 #ifndef GEOMETRY_HPP
7 #define GEOMETRY_HPP 1
8 #include <vector>
9 #include <boost/array.hpp>
10 #ifdef RICH_MPI
11 #include "../misc/serializable.hpp"
12 #endif // RICH_MPI
13 
15 class Vector2D
16 #ifdef RICH_MPI
17  : public Serializable
18 #endif // RICH_MPI
19 {
20 public:
21 
25  Vector2D(void);
26 
31  Vector2D(double ix, double iy);
32 
36  Vector2D(const Vector2D& v);
37 
42  void Set(double ix, double iy);
43 
45  double x;
46 
48  double y;
49 
54  Vector2D& operator+=(Vector2D const& v);
55 
60  Vector2D& operator-=(Vector2D const& v);
61 
66  Vector2D& operator=(Vector2D const& v);
67 
72  Vector2D& operator*=(double s);
73 
77  void Rotate(double a);
79  double distance(Vector2D const& v1) const;
80 
81 #ifdef RICH_MPI
82 
86  template<class Archive>
87  void serialize
88  (Archive& ar,
89  const unsigned int /*version*/)
90  {
91  ar & x;
92  ar & y;
93  }
94 
95  vector<double> serialize(void) const;
96 
97  size_t getChunkSize(void) const;
98 
99  void unserialize
100  (const vector<double>& data);
101 #endif // RICH_MPI
102 };
103 
108 double abs(Vector2D const& v);
109 
114 double fastabs(Vector2D const& v);
115 
121 Vector2D operator+(Vector2D const& v1, Vector2D const& v2);
122 
128 Vector2D operator-(Vector2D const& v1, Vector2D const& v2);
129 
135 Vector2D operator*(double d, Vector2D const& v);
136 
142 Vector2D operator*(Vector2D const& v, double d);
143 
149 Vector2D operator/(Vector2D const& v, double d);
150 
156 double ScalarProd(Vector2D const& v1, Vector2D const& v2);
157 
163 double CalcAngle(Vector2D const& v1, Vector2D const& v2);
164 
170 double Projection(Vector2D const& v1, Vector2D const& v2);
171 
177 Vector2D Rotate(Vector2D const& v, double a);
178 
184 Vector2D Reflect(Vector2D const& v, Vector2D const& axis);
185 
191 double distance(Vector2D const& v1, Vector2D const& v2);
192 
198 double CrossProduct(Vector2D const& v1, Vector2D const& v2);
199 
205 Vector2D calc_mid_point(Vector2D const& v1, Vector2D const& v2);
206 
211 Vector2D zcross(Vector2D const& v);
212 
218 Vector2D pol2cart(double radius, double angle);
219 
224 Vector2D normalize(const Vector2D& v);
225 
230 double dist_sqr(const Vector2D& v);
231 
232 #endif // GEOMETRY_HPP
double distance(Vector2D const &v1) const
Caluclates the distance from the Vector to v1.
Definition: geometry.cpp:13
Vector2D operator/(Vector2D const &v, double d)
Scalar division.
Definition: geometry.cpp:102
Vector2D Reflect(Vector2D const &v, Vector2D const &axis)
Reflect vector.
Definition: geometry.cpp:124
size_t getChunkSize(void) const
Returns the size of array needed to store all data.
Definition: geometry.cpp:169
void Rotate(double a)
Rotates the vector in an anticlockwise direction.
Definition: geometry.cpp:75
double CrossProduct(Vector2D const &v1, Vector2D const &v2)
Returns the z component of the cross product of two vectors.
Definition: geometry.cpp:134
Vector2D operator-(Vector2D const &v1, Vector2D const &v2)
Term by term subtraction.
Definition: geometry.cpp:86
double y
Component in the y direction.
Definition: geometry.hpp:48
vector< double > serialize(void) const
Convert an object to an array of numbers.
Definition: geometry.cpp:174
Vector2D pol2cart(double radius, double angle)
Converts from polar coordinates to cartesian coordinates.
Definition: geometry.cpp:150
Vector2D & operator+=(Vector2D const &v)
Addition.
Definition: geometry.cpp:61
double Projection(Vector2D const &v1, Vector2D const &v2)
Calculates the projection of one vector in the direction of the second.
Definition: geometry.cpp:114
double ScalarProd(Vector2D const &v1, Vector2D const &v2)
Scalar product of two vectors.
Definition: geometry.cpp:107
Base class for a serializable object.
Vector2D normalize(const Vector2D &v)
Normalized a vector.
Definition: geometry.cpp:158
Vector2D operator*(double d, Vector2D const &v)
Scalar product.
Definition: geometry.cpp:92
Vector2D & operator*=(double s)
Scalar product.
Definition: geometry.cpp:54
void Set(double ix, double iy)
Set vector components.
Definition: geometry.cpp:39
Vector2D & operator-=(Vector2D const &v)
Subtraction.
Definition: geometry.cpp:68
Vector2D(void)
Null constructor.
Definition: geometry.cpp:30
Vector2D & operator=(Vector2D const &v)
Assigment operator.
Definition: geometry.cpp:45
double abs(Vector2D const &v)
Norm of a vector.
Definition: geometry.cpp:19
Vector2D calc_mid_point(Vector2D const &v1, Vector2D const &v2)
Calculates the mid point between two vectors.
Definition: geometry.cpp:140
void unserialize(const vector< double > &data)
Convert an array of numbers to an object.
Definition: geometry.cpp:183
double CalcAngle(Vector2D const &v1, Vector2D const &v2)
Returns the angle between two vectors (in radians)
Definition: geometry.cpp:119
2D Mathematical vector
Definition: geometry.hpp:15
double fastabs(Vector2D const &v)
Norm of a vector, less accurate.
Definition: geometry.cpp:24
Vector2D operator+(Vector2D const &v1, Vector2D const &v2)
Term by term addition.
Definition: geometry.cpp:81
double x
Component in the x direction.
Definition: geometry.hpp:45
Vector2D zcross(Vector2D const &v)
Cross product of a vector in x,y plane with a unit vector in the z direction.
Definition: geometry.cpp:145
double dist_sqr(const Vector2D &v)
Calculates the square of the distance. This is computationaly cheaper then actually calculating the d...
Definition: geometry.cpp:163