00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #import <cmath>
00027 #import "sgVector3.h"
00028 #import "sgVector4.h"
00029 #import "sgMatrix4x4.h"
00030
00034 class sgQuaternion
00035 {
00036 public:
00042 sgQuaternion(const sgQuaternion &quat);
00043
00052 sgQuaternion(float x_ = 0.0f, float y_ = 0.0f, float z_ = 0.0f, float w_ = 1.0f);
00053
00059 sgQuaternion(const sgVector3 &rot);
00060
00066 sgQuaternion(const sgVector4 &rot);
00067
00072 bool operator== (sgQuaternion &other);
00073
00078 bool operator!= (sgQuaternion &other);
00079
00084 sgQuaternion &operator= (const sgQuaternion &other);
00085
00090 sgQuaternion &operator= (const sgVector3 &other);
00091
00096 sgQuaternion &operator= (const sgVector4 &other);
00097
00102 sgQuaternion &operator+= (const sgQuaternion &other);
00103
00108 sgQuaternion &operator-= (const sgQuaternion &other);
00109
00114 sgQuaternion &operator*= (const sgQuaternion &other);
00115
00120 sgQuaternion &operator/= (const sgQuaternion &other);
00121
00126 sgQuaternion operator+ (const sgQuaternion &other);
00127
00132 sgQuaternion operator- (const sgQuaternion &other);
00133
00138 sgQuaternion operator* (const sgQuaternion &other);
00139
00144 sgQuaternion operator/ (const sgQuaternion &other);
00145
00150 sgQuaternion &operator+= (const sgVector3 &other);
00151
00156 sgQuaternion &operator-= (const sgVector3 &other);
00157
00162 sgQuaternion operator+ (const sgVector3 &other);
00163
00168 sgQuaternion operator- (const sgVector3 &other);
00169
00174 sgQuaternion &operator*= (const float &other);
00175
00180 sgQuaternion &operator/= (const float &other);
00181
00186 sgQuaternion operator* (const float &other);
00187
00192 sgQuaternion operator/ (const float &other);
00193
00198 void makeIdentity();
00199
00205 void makeEuler(const sgVector3 &rot);
00206
00212 void makeEuler(const sgVector4 &rot);
00213
00220 void makeAxisAngle(const sgVector3 &axis, float ang);
00221
00227 void makeAxisAngle(const sgVector4 &axis);
00228
00236 void makeLerpS(const sgQuaternion &quat1, const sgQuaternion &quat2, float fac);
00237
00245 void makeLerpN(const sgQuaternion &quat1, const sgQuaternion &quat2, float fac);
00246
00253 void makeLerpS(const sgQuaternion &other, float fac);
00254
00261 void makeLerpN(const sgQuaternion &other, float fac);
00262
00270 sgQuaternion lerpS(sgQuaternion &other, float fac);
00271
00279 sgQuaternion lerpN(sgQuaternion &other, float fac);
00280
00285 void normalize();
00286
00291 void conjugate();
00292
00298 float length();
00299
00306 float dot(const sgQuaternion &other);
00307
00314 sgVector3 rotate(const sgVector3 &vec);
00315
00322 sgVector4 rotate(const sgVector4 &vec);
00323
00329 sgMatrix4x4 getMatrix();
00330
00336 sgVector3 getEuler();
00337
00343 sgVector4 getAxisAngle();
00344
00349 float x;
00350
00355 float y;
00356
00361 float z;
00362
00367 float w;
00368 };