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
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef __CMAT4D_H_
00035 #define __CMAT4D_H_
00036
00037
00038
00040
00041
00042
00044
00045 #include <math.h>
00046 #include <string.h>
00047
00048
00049
00051
00052 #include "CQuat.h"
00053 #include "CP4D.h"
00054
00055
00056
00058
00081 class CMat4D {
00082
00083 public:
00085 CMat4D(void);
00086
00090 CMat4D(const CV4D&, const CV4D&, const CV4D&, const CV4D&);
00091
00095 CMat4D(const double*);
00096
00098 CMat4D(double, double, double, double, double, double, double, double,
00099 double, double, double, double, double, double, double, double);
00100
00102 CMat4D(const CMat4D&);
00103
00105 static CMat4D PIdentity(void);
00106
00109 static CMat4D PTranslate(const CV4D&);
00110
00112 static CMat4D PTranslate(const CV3D&);
00113
00115 static CMat4D PTranslate(double, double, double);
00116
00119 static CMat4D PScale(const CV4D&);
00120
00122 static CMat4D PScale(const CV3D&);
00123
00125 static CMat4D PScale(double, double, double);
00126
00130 static CMat4D PRotate(const CV4D&, double);
00131
00134 static CMat4D PRotate(const CV3D&, double);
00135
00137 static CMat4D PRotate(CQuat&);
00138
00140 ~CMat4D(void);
00141
00142
00143
00145
00147
00149 const CMat4D& operator=(const CMat4D&);
00150
00152 const CMat4D& operator=(const double a);
00153
00155 CMat4D& operator+=(const CMat4D &m);
00156
00157
00158 CMat4D& operator-=(const CMat4D &m);
00159
00161 CMat4D& operator*=(const CMat4D&);
00162
00163
00165 CMat4D operator+(const CMat4D&) const;
00166
00168 CMat4D operator-(const CMat4D&) const;
00169
00171 CMat4D operator*(const CMat4D &m) const;
00172
00174 CMat4D operator*(double scalar) const;
00175
00177 bool operator == (const CMat4D &m) const;
00178
00180 bool operator != (const CMat4D &m) const;
00181
00182
00184 double operator()(int i,int j) const;
00185
00187 CV4D operator[](int i) const;
00188
00190 CV4D operator()(int j) const;
00191
00192
00194 friend CV4D operator*(const CMat4D&, const CV4D&);
00195
00197 friend CP4D operator*(const CMat4D&, const CP4D&);
00198
00200 friend CMat4D operator*(double, const CMat4D&);
00201
00203 friend CMat4D operator*(const CMat4D& M, double rdFactor) { return rdFactor*M; };
00204
00205
00206
00208
00210
00212 const double *getArray() { return m_ardValues; };
00213
00215 void clear(void);
00216
00220 void setValues(double* field);
00221
00223 double getCoeff(int i,int j) const;
00224
00226 void setCoeff(int i,int j, double value);
00227
00229 CMat4D getTransposed(void) const;
00230
00231
00232 CMat4D getInverted(void) const;
00233
00235 bool invert(void);
00236
00238 void transpose(void);
00239
00241 void print(void);
00242
00244 friend ostream& operator << (ostream& s, const CMat4D &m );
00245
00247 void setIdentity( void );
00248
00250 CV4D getRow(int);
00251
00253 CV4D getCol(int);
00254
00256 void setRow(int nRow, const CV4D&);
00257
00259 void setCol(int nCol, const CV4D&);
00261 void setRows(const CV4D&, const CV4D&, const CV4D&, const CV4D&);
00262
00264 void setCols(const CV4D&, const CV4D&, const CV4D&, const CV4D&);
00265
00269 void setScaling(const CV4D&);
00270
00274 void setScaling(const CV3D&);
00275
00279 void setScaling(double, double, double);
00280
00284 void setTranslation(const CV4D&);
00285
00289 void setTranslation(const CV3D&);
00290
00294 void setTranslation(double, double, double);
00295
00297 void setRotation(CV4D&, double);
00298
00300 void setRotation(CV3D&, double);
00301
00303 void setRotation(CQuat&);
00304
00305
00306
00307 private:
00309 double* get1DField(void);
00310
00312 double** get2DField(void);
00313
00314 double m_ardValues[16];
00315 };
00316
00317 #endif // __CMAT4D_H_