GEL
2
GEL is a library for Geometry and Linear Algebra
|
00001 #ifndef __CGLA_ARITHSQMAT3X3FLOAT_H__ 00002 #define __CGLA_ARITHSQMAT3X3FLOAT_H__ 00003 00004 #include "ExceptionStandard.h" 00005 #include "CGLA.h" 00006 #include "Vec3f.h" 00007 #include "ArithSqMatFloat.h" 00008 00009 namespace CGLA 00010 { 00011 00012 CGLA_DERIVEEXCEPTION(Mat3x3fException) 00013 CGLA_DERIVEEXCEPTION(Mat3x3fSingular) 00014 00019 template<class V, class M> 00020 class ArithSqMat3x3Float: public ArithSqMatFloat<V, M, 3> 00021 { 00022 public: 00023 00025 typedef V VectorType; 00026 00028 typedef typename V::ScalarType ScalarType; 00029 00030 public: 00031 00033 ArithSqMat3x3Float(V _a, V _b, V _c): 00034 ArithSqMatFloat<V, M, 3> (_a,_b,_c) {} 00035 00037 ArithSqMat3x3Float() {} 00038 00040 explicit ArithSqMat3x3Float(ScalarType a): 00041 ArithSqMatFloat<V, M, 3>(a) {} 00042 00043 }; 00044 00046 template<class V, class M> 00047 M invert(const ArithSqMat3x3Float<V,M>&); 00048 00052 template<class V, class M> 00053 inline 00054 typename ArithSqMat3x3Float<V,M>::ScalarType 00055 determinant(const ArithSqMat3x3Float<V,M>& m) 00056 { 00057 return 00058 m[0][0]*m[1][1]*m[2][2] + 00059 m[0][1]*m[1][2]*m[2][0] + 00060 m[0][2]*m[1][0]*m[2][1] - 00061 m[0][2]*m[1][1]*m[2][0] - 00062 m[0][0]*m[1][2]*m[2][1] - 00063 m[0][1]*m[1][0]*m[2][2] ; 00064 } 00065 00066 00067 } 00068 #endif 00069 00070 00071 00072 00073 00074 00075