00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _deQuaternion_h
00024 #define _deQuaternion_h
00025
00035 class deQuaternion
00036 {
00037 public:
00039 operator deFloat*() { return _data; }
00041 operator const deFloat*() const { return _data; }
00043 deFloat& operator[](const deInt i) { return _data[i]; }
00045 const deFloat& operator[](const deInt i) const { return _data[i]; }
00047 DE_MATH_API void operator=(const deQuaternion& q);
00049 DE_MATH_API deInt operator==(const deQuaternion& q);
00051 DE_MATH_API void operator+=(const deQuaternion& q);
00053 DE_MATH_API void operator-=(const deQuaternion& q);
00055 DE_MATH_API void operator*=(const deFloat s);
00057 DE_MATH_API void identity();
00059 DE_MATH_API void zero();
00061 DE_MATH_API deFloat dot(const deQuaternion& q);
00063 DE_MATH_API void normalize();
00065 DE_MATH_API void get(deVector3& axis, deFloat &angle) const;
00067 DE_MATH_API void set(const deMatrix3& m);
00069 DE_MATH_API void set(const deInt axis, const deFloat angle);
00071 DE_MATH_API void set(const deVector3& axis, const deFloat angle);
00073 DE_MATH_API void set(const deFloat x, const deFloat y, const deFloat z, const deFloat w);
00075 DE_MATH_API void set(const deFloat* q);
00077 DE_MATH_API void eulerZYX(const deVector3& v);
00079 DE_MATH_API void negate(const deQuaternion& q);
00081 DE_MATH_API void inverse(const deQuaternion& q);
00083 DE_MATH_API void add(const deQuaternion& q1, const deQuaternion& q2);
00085 DE_MATH_API void subtract(const deQuaternion& q1, const deQuaternion& q2);
00087 DE_MATH_API void multiply(const deQuaternion& q1, const deQuaternion& q2);
00089 DE_MATH_API void inversedMultiply(const deQuaternion& q1, const deQuaternion& q2);
00091 DE_MATH_API void multiplyInversed(const deQuaternion& q1, const deQuaternion& q2);
00093
00094
00095 DE_MATH_API void velocity(const deQuaternion& q, const deVector3& omega);
00097
00101 DE_MATH_API void consistentSign(const deQuaternion& q, const deQuaternion& qg);
00103 DE_MATH_API void slerp(const deQuaternion& q, const deQuaternion& qg, const deFloat t, const deFloat addedSpins);
00105
00107 DE_MATH_API void lerp(const deQuaternion& q, const deQuaternion& qg, const deFloat t);
00108
00109 private:
00110 deFloat _data[DE_QUATERNION_SIZE];
00111 };
00112
00113 #endif // _deQuaternion_h