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 #ifndef QUATERNION_H_INCLUDED
00027 #define QUATERNION_H_INCLUDED
00028
00029 #ifdef __cplusplus
00030 extern "C" {
00031 #endif
00032
00033
00034 #include "utility.h"
00035 #include "mat4.h"
00036
00037 struct kmVec3;
00038 struct kmMat4;
00039
00040 typedef struct kmQuaternion {
00041 kmScalar x;
00042 kmScalar y;
00043 kmScalar z;
00044 kmScalar w;
00045 } kmQuaternion;
00046
00047 kmQuaternion* kmQuaternionConjugate(kmQuaternion* pOut,
00048 const kmQuaternion* pIn);
00049
00050
00051
00052 kmScalar kmQuaternionDot(const kmQuaternion* q1,
00053 const kmQuaternion* q2);
00054
00055
00056
00057 kmQuaternion* kmQuaternionExp(kmQuaternion* pOut, const kmQuaternion* pIn);
00058
00060
00061 kmQuaternion* kmQuaternionIdentity(kmQuaternion* pOut);
00062
00064
00065 kmQuaternion* kmQuaternionInverse(kmQuaternion* pOut,
00066 const kmQuaternion* pIn);
00067
00069
00070 int kmQuaternionIsIdentity(const kmQuaternion* pIn);
00071
00073
00074 kmScalar kmQuaternionLength(const kmQuaternion* pIn);
00075
00077
00078 kmScalar kmQuaternionLengthSq(const kmQuaternion* pIn);
00079
00081
00082 kmQuaternion* kmQuaternionLn(kmQuaternion* pOut, const kmQuaternion* pIn);
00083
00085
00086 kmQuaternion* kmQuaternionMultiply(kmQuaternion* pOut,
00087 const kmQuaternion* q1,
00088 const kmQuaternion* q2);
00089
00091
00092 kmQuaternion* kmQuaternionNormalize(kmQuaternion* pOut,
00093 const kmQuaternion* pIn);
00094
00096
00097 kmQuaternion* kmQuaternionRotationAxis(kmQuaternion* pOut,
00098 const kmVec3* pV,
00099 kmScalar angle);
00100
00102
00103 kmQuaternion* kmQuaternionRotationMatrix(kmQuaternion* pOut,
00104 const kmMat4* pIn);
00105
00107
00108 kmQuaternion* kmQuaternionRotationYawPitchRoll(kmQuaternion* pOut,
00109 kmScalar yaw,
00110 kmScalar pitch,
00111 kmScalar roll);
00113
00114 kmQuaternion* kmQuaternionSlerp(kmQuaternion* pOut,
00115 const kmQuaternion* q1,
00116 const kmQuaternion* q2,
00117 kmScalar t);
00118
00120
00121 void kmQuaternionToAxisAngle(const kmQuaternion* pIn,
00122 kmVec3* pVector,
00123 kmScalar* pAngle);
00124
00126
00127 kmQuaternion* kmQuaternionScale(kmQuaternion* pOut,
00128 const kmQuaternion* pIn,
00129 kmScalar s);
00130
00131
00132 kmQuaternion* kmQuaternionAssign(kmQuaternion* pOut, const kmQuaternion* pIn);
00133 kmQuaternion* kmQuaternionAdd(kmQuaternion* pOut, const kmQuaternion* pQ1, const kmQuaternion* pQ2);
00134
00135 kmQuaternion* kmQuaternionRotationBetweenVec3(kmQuaternion* pOut, const kmVec3* vec1, const kmVec3* vec2, const kmVec3* fallback);
00136 kmVec3* kmQuaternionMultiplyVec3(kmVec3* pOut, const kmQuaternion* q, const kmVec3* v);
00137
00138 #ifdef __cplusplus
00139 }
00140 #endif
00141
00142 #endif