raSystem  1.0 bata
raQuaternion.h
Go to the documentation of this file.
1 #pragma once
2 
4  {
5  public:
6  union
7  {
8  struct
9  {
11  float s;
12  };
13  float qu[4];
14  };
15  raQuaternion() : s(1.0f), v(raVector3(0.0f)) {}
16  raQuaternion(const raVector3 &angles);
17  raQuaternion(float Angle, raVector3 Axis);
18  raQuaternion(raVector3 Axis, float Angle);
19  raQuaternion(float fs, float fx, float fy, float fz);
20  raQuaternion(float *pfs);
22 
23  operator float* () { return (float*)(qu); }
24  operator void* () { return (void*)(qu); }
25  operator const float* () const { return (float*)qu; }
26 
27  raQuaternion& operator = (const raQuaternion& q) { v = q.v; s = q.s; return *this; }
28  raQuaternion& operator += (const raQuaternion& q) { v += q.v; s += q.s; return *this; }
29  raQuaternion& operator -= (const raQuaternion& q) { v -= q.v; s -= q.s; return *this; }
30  raQuaternion& operator *= (const raQuaternion& q); //
31  raQuaternion& operator *= (const float f);
32  raQuaternion& operator /= (const raQuaternion& q); //
33  raQuaternion& operator /= (const float f);
34 
35  raVector3 GetRotationAxis() const;
36  float GetRotationAngle() const;
37  };
39  RAPI raQuaternion operator * (const float a,const raQuaternion& b);
40  RAPI raQuaternion operator * (const raQuaternion& a,const float b); //
41 
46  RAPI raQuaternion operator / (const raQuaternion& a, const float b); //
47  RAPI raQuaternion operator / (const float a, const raQuaternion& b);
48 
49  inline bool operator == (const raQuaternion& a, const raQuaternion& b) { return ((a.v == b.v) && (a.s == b.s)); }
50  inline bool operator != (const raQuaternion& a, const raQuaternion& b) { return !(a==b); }
51  inline bool operator <= (const raQuaternion& a, const raQuaternion& b) { return ((a.v <= b.v) && (a.s <= b.s)); }
52  inline bool operator >= (const raQuaternion& a, const raQuaternion& b) { return ((a.v >= b.v) && (a.s >= b.s)); }
53  inline bool operator < (const raQuaternion& a, const raQuaternion& b) { return ((a.v < b.v) && (a.s < b.s)); }
54  inline bool operator > (const raQuaternion& a, const raQuaternion& b) { return ((a.v > b.v) && (a.s > b.s)); }
55 
56  inline raQuaternion raQuaternionIdenty() { return raQuaternion(1.0f, 0.0f, 0.0f, 0.0f); }
57  inline float raQuaternionLenght(const raQuaternion& v) { return sqrtf(v.s * v.s + (float)v.v.x * (float)v.v.x + (float)v.v.y * (float)v.v.y + (float)v.v.z * (float)v.v.z); }
58  inline float raQuaternionLenghtSq(const raQuaternion& v) { return (v.s * v.s + (float)v.v.x * (float)v.v.x + (float)v.v.y * (float)v.v.y + (float)v.v.z * (float)v.v.z); }
59 
62  RAPI raQuaternion raQuaternionPow(const raQuaternion& v, float Exp);
63  RAPI float raQuaternionDot(const raQuaternion &a, const raQuaternion &b); // Dot Product
64 
66 
68  RAPI raQuaternion raQuaternionFromAxis(const float Angle, raVector3 Axis);
71  RAPI raQuaternion raQuaternionSlerp(const raQuaternion &q0, const raQuaternion &q1, float t); // Spherical linear interpolation.
72 
73  RAPI raQuaternion raQuaternionPower(const raQuaternion& qu, float degree);
74 
float raQuaternionLenght(const raQuaternion &v)
Definition: raQuaternion.h:57
bool operator>=(const raQuaternion &a, const raQuaternion &b)
Definition: raQuaternion.h:52
raFloat y
Definition: raVector3.h:13
bool operator<=(const raQuaternion &a, const raQuaternion &b)
Definition: raQuaternion.h:51
RAPI raQuaternion raQuaternionTan(const raQuaternion &q)
raFloat x
Definition: raVector3.h:12
RAPI raQuaternion operator/(const raQuaternion &a, const raQuaternion &b)
#define RAPI
Definition: raMain.h:11
RAPI raQuaternion operator*(const raQuaternion &a, const raQuaternion &b)
bool operator==(const raQuaternion &a, const raQuaternion &b)
Definition: raQuaternion.h:49
RAPI raQuaternion raQuaternionLog(const raQuaternion &v)
RAPI raQuaternion raQuaternionPow(const raQuaternion &v, float Exp)
RAPI raQuaternion raQuaternionNormalize(const raQuaternion &v)
RAPI raQuaternion raQuaternionSlerp(const raQuaternion &q0, const raQuaternion &q1, float t)
raFloat z
Definition: raVector3.h:14
RAPI raQuaternion operator+(const raQuaternion &a, const raQuaternion &b)
bool operator<(const raQuaternion &a, const raQuaternion &b)
Definition: raQuaternion.h:53
bool operator!=(const raQuaternion &a, const raQuaternion &b)
Definition: raQuaternion.h:50
RAPI raQuaternion operator-(const raQuaternion &a, const raQuaternion &b)
RAPI raQuaternion raQuaternionConjugate(const raQuaternion &v)
RAPI raQuaternion raQuaternionInvert(const raQuaternion &q)
RAPI raQuaternion raQuaternionFromAxis(const float Angle, raVector3 Axis)
raQuaternion raQuaternionIdenty()
Definition: raQuaternion.h:56
RAPI raQuaternion raQuaternionPower(const raQuaternion &qu, float degree)
RAPI float raQuaternionDot(const raQuaternion &a, const raQuaternion &b)
RAPI raQuaternion raQuaternionCTan(const raQuaternion &q)
RAPI raQuaternion raQuaternionCos(const raQuaternion &q)
RAPI raMatrix raQuaternionToMatrix(const raQuaternion &v)
bool operator>(const raQuaternion &a, const raQuaternion &b)
Definition: raQuaternion.h:54
float raQuaternionLenghtSq(const raQuaternion &v)
Definition: raQuaternion.h:58
RAPI raQuaternion raQuaternionSin(const raQuaternion &q)
raVector3 v
Definition: raQuaternion.h:10
RAPI raQuaternion raQuaternionExp(const raQuaternion &v)