ps2quaternion.h

00001 /*
00002 * "PS2" Application Framework
00003 *
00004 * University of Abertay Dundee
00005 * May be used for educational purposed only
00006 *
00007 * Author - Dr Henry S Fortuna
00008 *
00009 * $Revision: 1.2 $
00010 * $Date: 2007/08/19 12:45:11 $
00011 *
00012 */
00013 
00014 #ifndef _PS2QUATERNION_H_
00015 #define _PS2QUATERNION_H_
00016 
00017 #include <stdio.h>
00018 #include "ps2matrix4x4.h"
00019 #include "ps2vector4.h"
00020 
00021 namespace HSFMaths
00022 {
00023         class Quaternion
00024         {
00025         public:
00026         
00027                 Quaternion(void);
00028                 Quaternion(const float _x, const float _y, const float _z, const float _w);
00029                 Quaternion(Vector4 V, const float theta);
00030                 ~Quaternion(void);
00031 
00032                 Quaternion & NormaliseSelf(void);
00033                 Quaternion Conjugate(void);
00034                 Matrix4x4 ToRotationMatrix4x4(void);
00035                 void SetQuaternion(Vector4 V, const float theta);
00036                 void Quaternion::DumpQuaternion(const char * s = NULL);
00037 
00038                 float w,x,y,z;
00039         };
00040 }
00041 
00042 inline HSFMaths::Quaternion operator + (const HSFMaths::Quaternion &q1,
00043                                                                                 const HSFMaths::Quaternion &q2)
00044 {
00045         return HSFMaths::Quaternion(q1.x + q2.x, q1.y + q2.y, q1.z + q2.z, q1.w + q2.w);
00046 }
00047 
00048 inline HSFMaths::Quaternion operator - (const HSFMaths::Quaternion &q1,
00049                                                                                 const HSFMaths::Quaternion &q2)
00050 {
00051         return HSFMaths::Quaternion(q1.x - q2.x, q1.y - q2.y, q1.z - q2.z, q1.w - q2.w);
00052 }
00053 
00054 
00055 inline HSFMaths::Quaternion operator * (const HSFMaths::Quaternion &A,
00056                                                                                 const HSFMaths::Quaternion &B)
00057 {
00058 
00059   HSFMaths::Quaternion C;
00060 
00061   C.x = A.w*B.x + A.x*B.w + A.y*B.z - A.z*B.y;
00062   C.y = A.w*B.y - A.x*B.z + A.y*B.w + A.z*B.x;
00063   C.z = A.w*B.z + A.x*B.y - A.y*B.x + A.z*B.w;
00064   C.w = A.w*B.w - A.x*B.x - A.y*B.y - A.z*B.z;
00065   return C;
00066 }
00067 
00068 
00069 
00070 inline HSFMaths::Quaternion operator * (const HSFMaths::Quaternion &q,
00071                                                                                 const float &s)
00072 {
00073         return HSFMaths::Quaternion(q.x * s, q.y * s, q.z * s, q.w * s);
00074 }
00075 
00076 inline HSFMaths::Quaternion operator * (const float &s,
00077                                                                                 const HSFMaths::Quaternion &q)
00078 {
00079         return HSFMaths::Quaternion(q.x * s, q.y * s, q.z * s, q.w * s);
00080 }
00081 
00082 
00083 #endif

Generated on Sun May 18 21:45:08 2008 for PS2X by  doxygen 1.5.4