| Revision 5 (by guilt, 2006/03/06 11:11:58) |
|---|
#ifndef __XGL_QUAT_H__ #define __XGL_QUAT_H__ #include <allegro.h> #include <alleggl.h> #include <math.h> class Quaternion { public: double x, y, z, w; Quaternion() : x(0), y(0), z(0), w(0) { } Quaternion (float _c) : x(_c), y(_c), z(_c), w(_c) { } Quaternion(float _x, float _y, float _z, float _w) : x(_x), y(_y), z(_z), w(_w) { } Quaternion(const QUAT &q) { x = q.x; y = q.y; z = q.z; w = q.w; } Quaternion(const Quaternion &q) { x = q.x; y = q.y; z = q.z; w = q.w; } QUAT toQUAT(){ QUAT q; q.x=x; q.y=y; q.z=z; q.w=w; return q; } // Operators inline Quaternion operator = (QUAT Q){ return Quaternion(Q); } inline Vector operator + (Vector v) { QUAT q=toQUAT(); float x, y, z; apply_quat(&q, v.x, v.y, v.z, &x, &y, &z); return Vector(x,y,z); } inline Quaternion operator * (Quaternion q) { QUAT q1,q2,q3; q1=toQUAT(); q2=q.toQUAT(); quat_mul(&q3, &q1, &q2); return Quaternion(q3); } inline Quaternion operator *= (Quaternion q) { QUAT q1,q2; q1=q.toQUAT(); q2=toQUAT(); quat_mul(&q2, &q1, &q2); x=q2.x; y=q2.y; z=q2.z; w=q2.w; return *this; } inline Quaternion operator * (QUAT q) { QUAT q1,q2; q1=toQUAT(); quat_mul(&q2, &q1, &q); return Quaternion(q2); } }; #endif /* __XGL_QUAT_H__ */