00001 /******************************************************************************* 00002 * mat2.h 00003 * 00004 * (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de> 00005 * Universitaet Koblenz-Landau 00006 * 00007 * Author: Frank Neuhaus 00008 *******************************************************************************/ 00009 00010 #ifndef MAT2_H 00011 #define MAT2_H 00012 00013 #include <math.h> 00014 #include "Point2D.h" 00015 #include "vec2.h" 00016 00017 class CMat2 00018 { 00019 public: 00020 CMat2(); 00021 CMat2(float rot); 00022 ~CMat2(); 00023 00024 CMat2 operator *(const CMat2 &mat) const; 00025 00026 CVec2 operator *(const CVec2& v) const; 00027 00028 Point2D operator *(const Point2D& p) const; 00029 00030 float& operator [] (unsigned int position) { 00031 return fMatrix[position]; 00032 } 00033 00034 CMat2 operator +(const CMat2 rhs) const { 00035 CMat2 newMatrix; 00036 for (unsigned int i = 0; i < 4; i++) { 00037 newMatrix[i] = valueAt(i) + rhs.valueAt(i); 00038 } 00039 return newMatrix; 00040 } 00041 00042 CMat2 operator -(const CMat2 rhs) const { 00043 CMat2 newMatrix; 00044 for (unsigned int i = 0; i < 4; i++) { 00045 newMatrix[i] = valueAt(i) - rhs.valueAt(i); 00046 } 00047 return newMatrix; 00048 } 00049 00050 float valueAt(unsigned int position) const{ 00051 return fMatrix[position]; 00052 } 00053 00054 union 00055 { 00056 float fMatrix[4]; 00057 float m[2][2]; 00058 struct 00059 { 00060 float xx, xy; 00061 float yx, yy; 00062 }; 00063 }; 00064 00065 void transpose(); 00066 void loadIdentity(); 00067 00068 void makeRotation(float fA); 00069 00070 bool invert(); 00071 }; 00072 00073 00074 00075 #include "mat2_inl.h" 00076 00077 #endif