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
15typedef float Scalar;
16
18{
19
20public:
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
332private:
333 float vec[3];
334};
335
336#endif //_BASIC_H_
#define float
Definition 16_Level.h:22
float Scalar
Definition basic.h:15
#define DLL_LINKAGE
Definition basic.h:12
Definition basic.h:18
Vec3f & setValue(const float v[3])
Definition basic.h:51
Vec3f & operator-=(const Vec3f &v)
Definition basic.h:249
Vec3f & setValue(float x, float y, float z)
Definition basic.h:67
Vec3f & operator/=(float s)
Definition basic.h:229
bool equals(const Vec3f &v, float tolerance) const
Definition basic.h:152
friend Vec3f operator*(float s, const Vec3f &v)
Definition basic.h:268
Vec3f(const GfxTL::Vector3Df &v)
Definition basic.h:37
friend Vec3f operator-(const Vec3f &v1)
Definition basic.h:298
Vec3f()
Definition basic.h:28
friend bool operator!=(const Vec3f &v1, const Vec3f &v2)
Definition basic.h:213
Vec3f(float x, float y, float z)
Definition basic.h:32
friend Vec3f operator/(const Vec3f &v, float s)
Definition basic.h:280
@ Dim
Definition basic.h:25
friend bool operator>(const Vec3f &v1, const Vec3f &v2)
Definition basic.h:191
const float * getValue() const
Definition basic.h:61
Vec3f & setValue(const Vec3f &v)
Definition basic.h:314
float sqrLength() const
Definition basic.h:129
float length() const
Definition basic.h:135
Vec3f & operator+=(const Vec3f &v)
Definition basic.h:239
Vec3f cross(const Vec3f &v) const
Definition basic.h:121
friend bool operator>=(const Vec3f &v1, const Vec3f &v2)
Definition basic.h:202
friend Vec3f operator+(const Vec3f &v1, const Vec3f &v2)
Definition basic.h:286
friend Vec3f operator*(const Vec3f &v, float s)
Definition basic.h:274
Vec3f & operator*=(float s)
Definition basic.h:219
friend bool operator==(const Vec3f &v1, const Vec3f &v2)
Definition basic.h:158
float normalize()
Definition basic.h:141
friend bool operator<=(const Vec3f &v1, const Vec3f &v2)
Definition basic.h:180
friend Vec3f operator-(const Vec3f &v1, const Vec3f &v2)
Definition basic.h:292
void negate()
Definition basic.h:259
Vec3f(const float v[3])
Definition basic.h:45
friend bool operator<(const Vec3f &v1, const Vec3f &v2)
Definition basic.h:169
float dot(const float *v) const
Definition basic.h:115
float ScalarType
Definition basic.h:21
Vec3f operator*(const Vec3f &v) const
Definition basic.h:306
float dot(const Vec3f &v) const
Definition basic.h:104
void getValue(float &x, float &y, float &z) const
Definition basic.h:76
void getValue(Vec3f &v) const
Definition basic.h:324
VectorXD< 3, float > Vector3Df
Definition VectorXD.h:718
This file offers overloads of toIce() and fromIce() functions for STL container types.
double dot(const Point &x, const Point &y)
Definition point.hpp:57