basic.h
Go to the documentation of this file.
1 #ifndef _BASIC_H_
2 #define _BASIC_H_
3 #ifndef _USE_MATH_DEFINES
4 #define _USE_MATH_DEFINES
5 #endif
6 #include <cassert>
7 #include <cmath>
8 
9 #include <GfxTL/VectorXD.h>
10 
11 #ifndef DLL_LINKAGE
12 #define DLL_LINKAGE
13 #endif
14 
15 typedef float Scalar;
16 
18 {
19 
20 public:
21  typedef float ScalarType;
22 
23  enum
24  {
25  Dim = 3
26  };
27 
29  {
30  }
31 
32  Vec3f(float x, float y, float z)
33  {
34  setValue(x, y, z);
35  }
36 
38  {
39  for (unsigned int i = 0; i < 3; ++i)
40  {
41  vec[i] = v[i];
42  }
43  }
44 
45  explicit Vec3f(const float v[3])
46  {
47  setValue(v);
48  }
49 
50  Vec3f&
51  setValue(const float v[3])
52  {
53  for (int i = 0; i < 3; i++)
54  {
55  vec[i] = v[i];
56  }
57  return *this;
58  }
59 
60  const float*
61  getValue() const
62  {
63  return vec;
64  }
65 
66  Vec3f&
67  setValue(float x, float y, float z)
68  {
69  vec[0] = x;
70  vec[1] = y;
71  vec[2] = z;
72  return *this;
73  }
74 
75  void
76  getValue(float& x, float& y, float& z) const
77  {
78  x = vec[0];
79  y = vec[1];
80  z = vec[2];
81  }
82 
83  operator const float*() const
84  {
85  return vec;
86  }
87 
88  operator float*()
89  {
90  return vec;
91  }
92 
93  /*float& operator [] (int i)
94  {
95  return vec[i];
96  }
97 
98  const float& operator [] (int i) const
99  {
100  return vec[i];
101  }*/
102 
103  float
104  dot(const Vec3f& v) const
105  {
106  float s = vec[0] * v.vec[0];
107  for (int i = 1; i < 3; i++)
108  {
109  s += vec[i] * v.vec[i];
110  }
111  return s;
112  }
113 
114  float
115  dot(const float* v) const
116  {
117  return vec[0] * v[0] + vec[1] * v[1] + vec[2] * v[2];
118  }
119 
120  Vec3f
121  cross(const Vec3f& v) const
122  {
123  return Vec3f(vec[1] * v.vec[2] - vec[2] * v.vec[1],
124  vec[2] * v.vec[0] - vec[0] * v.vec[2],
125  vec[0] * v.vec[1] - vec[1] * v.vec[0]);
126  }
127 
128  float
129  sqrLength() const
130  {
131  return dot(*this);
132  }
133 
134  float
135  length() const
136  {
137  return (float)std::sqrt(dot(*this));
138  }
139 
140  float
142  {
143  float len = length();
144  if (len > 0)
145  {
146  *this /= len;
147  }
148  return len;
149  }
150 
151  bool
152  equals(const Vec3f& v, float tolerance) const
153  {
154  return ((*this - v).sqrLength() <= tolerance);
155  }
156 
157  friend bool
158  operator==(const Vec3f& v1, const Vec3f& v2)
159  {
160  for (int i = 0; i < 3; i++)
161  if (v1.vec[i] != v2.vec[i])
162  {
163  return false;
164  }
165  return true;
166  }
167 
168  friend bool
169  operator<(const Vec3f& v1, const Vec3f& v2)
170  {
171  for (int i = 0; i < 3; i++)
172  if (v1.vec[i] >= v2.vec[i])
173  {
174  return false;
175  }
176  return true;
177  }
178 
179  friend bool
180  operator<=(const Vec3f& v1, const Vec3f& v2)
181  {
182  for (int i = 0; i < 3; i++)
183  if (v1.vec[i] > v2.vec[i])
184  {
185  return false;
186  }
187  return true;
188  }
189 
190  friend bool
191  operator>(const Vec3f& v1, const Vec3f& v2)
192  {
193  for (int i = 0; i < 3; i++)
194  if (v1.vec[i] <= v2.vec[i])
195  {
196  return false;
197  }
198  return true;
199  }
200 
201  friend bool
202  operator>=(const Vec3f& v1, const Vec3f& v2)
203  {
204  for (int i = 0; i < 3; i++)
205  if (v1.vec[i] < v2.vec[i])
206  {
207  return false;
208  }
209  return true;
210  }
211 
212  friend bool
213  operator!=(const Vec3f& v1, const Vec3f& v2)
214  {
215  return !(v1 == v2);
216  }
217 
218  Vec3f&
219  operator*=(float s)
220  {
221  for (int i = 0; i < 3; i++)
222  {
223  vec[i] *= s;
224  }
225  return *this;
226  }
227 
228  Vec3f&
229  operator/=(float s)
230  {
231  for (int i = 0; i < 3; i++)
232  {
233  vec[i] /= s;
234  }
235  return *this;
236  }
237 
238  Vec3f&
240  {
241  for (int i = 0; i < 3; i++)
242  {
243  vec[i] += v.vec[i];
244  }
245  return *this;
246  }
247 
248  Vec3f&
250  {
251  for (int i = 0; i < 3; i++)
252  {
253  vec[i] -= v.vec[i];
254  }
255  return *this;
256  }
257 
258  void
260  {
261  for (int i = 0; i < 3; i++)
262  {
263  vec[i] = -vec[i];
264  }
265  }
266 
267  friend Vec3f
268  operator*(float s, const Vec3f& v)
269  {
270  return Vec3f(v) *= s;
271  }
272 
273  friend Vec3f
274  operator*(const Vec3f& v, float s)
275  {
276  return Vec3f(v) *= s;
277  }
278 
279  friend Vec3f
280  operator/(const Vec3f& v, float s)
281  {
282  return Vec3f(v) /= s;
283  }
284 
285  friend Vec3f
286  operator+(const Vec3f& v1, const Vec3f& v2)
287  {
288  return Vec3f(v1) += v2;
289  }
290 
291  friend Vec3f
292  operator-(const Vec3f& v1, const Vec3f& v2)
293  {
294  return Vec3f(v1) -= v2;
295  }
296 
297  friend Vec3f
298  operator-(const Vec3f& v1)
299  {
300  Vec3f v2 = v1;
301  v2.negate();
302  return v2;
303  }
304 
305  Vec3f
306  operator*(const Vec3f& v) const
307  {
308  return Vec3f(vec[0] * v.vec[0], vec[1] * v.vec[1], vec[2] * v.vec[2]);
309  }
310 
311  // Konvertierung:
312 
313  Vec3f&
314  setValue(const Vec3f& v)
315  {
316  for (int i = 0; i < 3; i++)
317  {
318  vec[i] = (float)v[i];
319  }
320  return *this;
321  }
322 
323  void
324  getValue(Vec3f& v) const
325  {
326  for (int i = 0; i < 3; i++)
327  {
328  v[i] = (Scalar)vec[i];
329  }
330  }
331 
332 private:
333  float vec[3];
334 };
335 
336 #endif //_BASIC_H_
GfxTL::VectorXD
Definition: MatrixXX.h:24
GfxTL::Vec3f
VectorXD< 3, float > Vec3f
Definition: VectorXD.h:733
Vec3f::getValue
void getValue(float &x, float &y, float &z) const
Definition: basic.h:76
Vec3f::normalize
float normalize()
Definition: basic.h:141
Vec3f
Definition: basic.h:17
Vec3f::cross
Vec3f cross(const Vec3f &v) const
Definition: basic.h:121
Vec3f::operator>
friend bool operator>(const Vec3f &v1, const Vec3f &v2)
Definition: basic.h:191
Vec3f::operator/=
Vec3f & operator/=(float s)
Definition: basic.h:229
Vec3f::length
float length() const
Definition: basic.h:135
Vec3f::operator+
friend Vec3f operator+(const Vec3f &v1, const Vec3f &v2)
Definition: basic.h:286
VectorXD.h
Vec3f::equals
bool equals(const Vec3f &v, float tolerance) const
Definition: basic.h:152
Vec3f::dot
float dot(const float *v) const
Definition: basic.h:115
Vec3f::operator*
friend Vec3f operator*(float s, const Vec3f &v)
Definition: basic.h:268
Vec3f::getValue
const float * getValue() const
Definition: basic.h:61
Vec3f::operator*
Vec3f operator*(const Vec3f &v) const
Definition: basic.h:306
Vec3f::operator+=
Vec3f & operator+=(const Vec3f &v)
Definition: basic.h:239
Vec3f::ScalarType
float ScalarType
Definition: basic.h:21
IceStormElection::operator<
bool operator<(const ReplicaObserver &lhs, const ReplicaObserver &rhs)
Definition: Election.h:2564
Vec3f::operator*
friend Vec3f operator*(const Vec3f &v, float s)
Definition: basic.h:274
Vec3f::Vec3f
Vec3f()
Definition: basic.h:28
Vec3f::Vec3f
Vec3f(const float v[3])
Definition: basic.h:45
Vec3f::operator/
friend Vec3f operator/(const Vec3f &v, float s)
Definition: basic.h:280
Vec3f::operator-=
Vec3f & operator-=(const Vec3f &v)
Definition: basic.h:249
GfxTL::sqrt
VectorXD< D, T > sqrt(const VectorXD< D, T > &a)
Definition: VectorXD.h:704
Vec3f::sqrLength
float sqrLength() const
Definition: basic.h:129
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
Vec3f::dot
float dot(const Vec3f &v) const
Definition: basic.h:104
Vec3f::negate
void negate()
Definition: basic.h:259
float
#define float
Definition: 16_Level.h:22
Vec3f::Vec3f
Vec3f(float x, float y, float z)
Definition: basic.h:32
Scalar
float Scalar
Definition: basic.h:15
Vec3f::Vec3f
Vec3f(const GfxTL::Vector3Df &v)
Definition: basic.h:37
Vec3f::getValue
void getValue(Vec3f &v) const
Definition: basic.h:324
dot
double dot(const Point &x, const Point &y)
Definition: point.hpp:57
Vec3f::setValue
Vec3f & setValue(const float v[3])
Definition: basic.h:51
Vec3f::setValue
Vec3f & setValue(const Vec3f &v)
Definition: basic.h:314
armarx::operator<=
bool operator<=(const RemoteHandle< PrxTA > &fst, const RemoteHandle< PrxTB > &snd)
Definition: RemoteHandle.h:304
DLL_LINKAGE
#define DLL_LINKAGE
Definition: basic.h:12
Vec3f::operator-
friend Vec3f operator-(const Vec3f &v1)
Definition: basic.h:298
Vec3f::operator!=
friend bool operator!=(const Vec3f &v1, const Vec3f &v2)
Definition: basic.h:213
Vec3f::operator>=
friend bool operator>=(const Vec3f &v1, const Vec3f &v2)
Definition: basic.h:202
Vec3f::operator*=
Vec3f & operator*=(float s)
Definition: basic.h:219
armarx::ctrlutil::s
double s(double t, double s0, double v0, double a0, double j)
Definition: CtrlUtil.h:33
Vec3f::operator-
friend Vec3f operator-(const Vec3f &v1, const Vec3f &v2)
Definition: basic.h:292
Vec3f::setValue
Vec3f & setValue(float x, float y, float z)
Definition: basic.h:67
Vec3f::operator==
friend bool operator==(const Vec3f &v1, const Vec3f &v2)
Definition: basic.h:158