1 |
|
#ifndef _QUATERNION_H_ |
2 |
|
#define _QUATERNION_H_ |
3 |
|
#include <iostream> |
4 |
+ |
#include "Vector4d.hpp" |
5 |
|
using namespace std; |
6 |
|
|
7 |
|
class Mat3x3d; |
8 |
|
class Euler3; |
9 |
|
class Vector3d; |
10 |
|
|
11 |
< |
class Quaternion{ |
11 |
> |
class Quaternion : public Vector4d{ |
12 |
|
public: |
13 |
|
Quaternion(){ |
14 |
+ |
x = 1.0; |
15 |
+ |
y = 0.0; |
16 |
+ |
z = 0.0; |
17 |
+ |
w = 0.0; |
18 |
|
} |
19 |
|
|
15 |
– |
Quaternion(double x, double y, double z, double w){ |
16 |
– |
this->x = x; |
17 |
– |
this->y = y; |
18 |
– |
this->z = z; |
19 |
– |
this->w = w; |
20 |
– |
} |
21 |
– |
|
22 |
– |
Quaternion(const Quaternion& q){ |
23 |
– |
this->x = q.x; |
24 |
– |
this->y = q.y; |
25 |
– |
this->z = q.z; |
26 |
– |
this->w = q.w; |
27 |
– |
} |
28 |
– |
|
20 |
|
Quaternion(Mat3x3d& m); |
21 |
|
|
22 |
|
Quaternion(const Euler3& e); |
32 |
– |
|
33 |
– |
inline double& operator[](unsigned int i) { |
34 |
– |
switch (i){ |
35 |
– |
case 0: |
36 |
– |
return x; |
37 |
– |
case 1: |
38 |
– |
return y; |
39 |
– |
case 2: |
40 |
– |
return z; |
41 |
– |
case 3: |
42 |
– |
return w; |
43 |
– |
default: |
44 |
– |
cerr << "error in Quaternion::::operator[]" << endl |
45 |
– |
<< "The method has been called with an illegal index i=" << i << "." << endl; |
46 |
– |
exit(1); |
47 |
– |
} |
48 |
– |
} |
23 |
|
|
24 |
+ |
Quaternion& operator=( const Vector4d& v1 ){ |
25 |
+ |
if(this == & v1) |
26 |
+ |
return *this; |
27 |
+ |
|
28 |
+ |
this->x = v1.x; |
29 |
+ |
this->y = v1.y; |
30 |
+ |
this->z = v1.z; |
31 |
+ |
this->w = v1.w; |
32 |
+ |
|
33 |
+ |
return *this; |
34 |
+ |
} |
35 |
+ |
|
36 |
|
Mat3x3d toRotationMatrix(); |
37 |
|
Euler3 toEuler(); |
38 |
< |
|
53 |
< |
union{ |
54 |
< |
struct{ |
55 |
< |
double x; |
56 |
< |
double y; |
57 |
< |
double z; |
58 |
< |
double w; |
59 |
< |
}; |
60 |
< |
double quat[4]; |
61 |
< |
}; |
38 |
> |
|
39 |
|
}; |
40 |
|
|
41 |
|
#endif //end ifndef _QUATERNION_H_ |