GEL  2
GEL is a library for Geometry and Linear Algebra
/Users/jab/Documents/Teaching/02585/GEL2_and_demos/GEL/src/CGLA/ArithSqMat3x3Float.h
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations