00001 #ifndef misc_H
00002 #define misc_H
00003
00004
00005 #include <memory.h>
00006
00007 #define SQUARE(number) (number*number)
00008 #define PI 3.141593
00009 #define DEG_TO_RAD(deg) ((float)(deg)*PI/180)
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00022
00032 class vector3f
00033 {
00034 public:
00035
00036
00037 vector3f()
00038 { memset(vertex, 0, sizeof(float[3])); }
00039
00040 vector3f(float x, float y, float z);
00041
00042 ~vector3f();
00043
00044 float vertex[3];
00045
00046 void print();
00047
00048 void LoadZero(void);
00049 float Length(void);
00050 float LengthSquared(void);
00051
00052 vector3f& operator= (const vector3f &v1);
00053
00054 friend bool operator== (const vector3f &v1, const vector3f &v2);
00055 friend bool operator<= (const vector3f &v1, const vector3f &v2);
00056 friend bool operator>= (const vector3f &v1, const vector3f &v2);
00057
00058 friend bool operator< (const vector3f &v1, const vector3f &v2);
00059 friend bool operator> (const vector3f &v1, const vector3f &v2);
00060
00061
00062 friend vector3f operator+ (const vector3f &v1, const vector3f &v2);
00063
00064 friend vector3f operator+ (const vector3f &v1, const float scalar);
00065 friend vector3f operator- (const vector3f &v1, const vector3f &v2);
00066 friend vector3f operator- (const vector3f &v1, const float scalar);
00067 friend vector3f operator* (const vector3f &v1, const vector3f &v2);
00068 friend vector3f operator* (const vector3f &v1, const float scalar);
00069 friend vector3f operator/ (const vector3f &v1, const vector3f &v2);
00070 friend vector3f operator/ (const vector3f &v1, const float scalar);
00071
00072 vector3f Abs(void);
00073
00074 friend float dot(const vector3f &v1, const vector3f &v2);
00075 friend vector3f Cross(const vector3f &v1, const vector3f &v2);
00076
00077
00078
00079
00080 void Set(float x,float y,float z);
00081 };
00082
00083
00084
00085
00087
00093 class matrix16f
00094 {
00095 public:
00096 float matrix[16];
00097
00098 void LoadZero(void);
00099 void LoadIdentity(void);
00100
00101 void print();
00102
00103 void Translate(float x, float y, float z);
00104 void Scale(float x, float y, float z);
00105
00106 void RotateX(int deg);
00107 void RotateY(int deg);
00108 void RotateZ(int deg);
00109
00110 void RotateX(float rad);
00111 void RotateY(float rad);
00112 void RotateZ(float rad);
00113
00114 void RotateXYZ(float x, float y, float z);
00115 void Rotate(matrix16f m1);
00116
00117 void Set(vector3f right, vector3f up, vector3f out);
00118
00119
00120 matrix16f& operator= (const matrix16f &m1);
00121
00122
00123 vector3f Transform(vector3f point);
00124 matrix16f FlipOrientation(void);
00125
00126 void Normalize(void);
00127
00128
00129 friend matrix16f operator+ (const matrix16f &m1, const matrix16f &m2);
00131 friend matrix16f operator+ (const matrix16f &m1, const vector3f &v2);
00132 friend matrix16f operator- (const matrix16f &m1, const matrix16f &m2);
00133 friend matrix16f operator* (const matrix16f &m1, const float scalar);
00134 friend matrix16f operator* (const matrix16f &m1, const matrix16f &m2);
00135 friend matrix16f operator/ (const matrix16f &m1, const float scalar);
00136 friend bool operator== (const matrix16f &m1, const matrix16f &m2);
00137
00138 matrix16f()
00139 { memset(matrix, 0, sizeof(float[16])); }
00140 };
00141
00142
00144
00149 class matrix9f
00150 {
00151 public:
00152 float matrix[9];
00153
00154 matrix9f()
00155 { memset(matrix, 0, sizeof(float[9])); }
00156
00157 void LoadZero(void);
00158 void LoadIdentity(void);
00159
00160
00161 void RotateX(int deg);
00162 void RotateY(int deg);
00163 void RotateZ(int deg);
00164
00165 matrix9f& operator= (const matrix9f &m1);
00166
00167
00168
00169 matrix9f Transpose(void);
00170 matrix9f Inverse(void);
00171
00172
00173 friend matrix9f Star(vector3f a);
00174
00175
00176 friend matrix9f operator+ (const matrix9f &m1, const matrix9f &m2);
00177 friend matrix16f operator+ (const matrix16f &m1, const matrix9f &m2);
00178 friend matrix9f operator- (const matrix9f &m1, const matrix9f &m2);
00179 friend matrix9f operator* (const matrix9f &m1, const float scalar);
00180 friend matrix9f operator* (const matrix9f &m1, const matrix9f &m2);
00181 friend vector3f operator* (const matrix9f &m1, const vector3f &v2);
00182
00183 friend matrix9f operator* (const matrix9f &m1, const matrix16f &m2);
00184 friend matrix9f operator* (const matrix16f &m1, const matrix9f &m2);
00185
00186 friend matrix9f operator/ (const matrix9f &m1, const float scalar);
00187 friend bool operator== (const matrix9f &m1, const matrix9f &m2);
00188 };
00189
00190
00191 float det(float f0, float f1, float f2, float f3);
00192
00193
00194 vector3f Cross(const vector3f &v1, const vector3f &v2);
00195
00196 typedef struct _triangleV {
00197 vector3f *vertNorm[3];
00198 vector3f *vertice[3];
00199 vector3f norm;
00200 } triangleV;
00201
00202 vector3f findNorm(int index, int numSurfTriangles, vector3f **surfTriangles);
00203
00204 #endif
00205