00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __MATRIX_HPP__
00022 #define __MATRIX_HPP__
00023
00024
00025 #include "Vector.hpp"
00026
00030 enum Axis{X_AXIS, Y_AXIS, Z_AXIS};
00031
00032
00036 class Matrix
00037 {
00038 private:
00042 float elements[4][4];
00043
00047 float det() const;
00048
00054 void elementaryOperation1(int i, int j);
00055
00061 void elementaryOperation2(int row, float factor);
00062
00069 void elementaryOperation3(int i, int j, float factor);
00070
00071 public:
00072
00079 float getElement(int i, int j) const;
00080
00087 void setElement(int i, int j, float value);
00088
00092 void identity();
00093
00094
00099 Vector operator*(const Vector& v) const;
00100
00104 Matrix operator*(const Matrix& m) const;
00105
00106
00110 Matrix invert() const;
00111
00112
00119 static Matrix rotation(Axis axis, float angle);
00120
00121
00127 static Matrix translation(const Vector& v);
00128
00134 static Matrix scale(const Vector& v);
00135 };
00136
00137
00138 #endif // __MATRIX_HPP__