mat3.cpp
Go to the documentation of this file.
00001 /*******************************************************************************
00002  *  mat3.h
00003  *
00004  *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
00005  *           Universitaet Koblenz-Landau
00006  *
00007  * Author: Frank Neuhaus, Susanne Maur
00008  *******************************************************************************/
00009 
00010 #include "mat3.h"
00011 #include "math.h"
00012 
00013 #define THIS CMat3
00014 
00015 //----------------------------------------------------------------------------------------------------------
00016 THIS::~CMat3()
00017 {
00018 }
00019 //----------------------------------------------------------------------------------------------------------
00020 void THIS::transpose()
00021 {
00022         float temp;
00023 
00024         temp=fMatrix[1];
00025         fMatrix[1]=fMatrix[3];
00026         fMatrix[3]=temp;
00027 
00028         temp=fMatrix[2];
00029         fMatrix[2]=fMatrix[6];
00030         fMatrix[6]=temp;
00031 
00032         temp=fMatrix[5];
00033         fMatrix[5]=fMatrix[7];
00034 
00035         fMatrix[7]=temp;
00036 }
00037 
00038 //----------------------------------------------------------------------------------------------------------
00039 
00040 void THIS::reverse() 
00041 {
00042   CMat3 temp;
00043 
00044   temp[0]=fMatrix[4]*fMatrix[8] - fMatrix[5]*fMatrix[7]; 
00045   temp[1]=fMatrix[2]*fMatrix[7] - fMatrix[1]*fMatrix[8];    
00046   temp[2]=fMatrix[1]*fMatrix[5] - fMatrix[2]*fMatrix[4];
00047   temp[3]=fMatrix[5]*fMatrix[6] - fMatrix[3]*fMatrix[8]; 
00048   temp[4]=fMatrix[0]*fMatrix[8] - fMatrix[2]*fMatrix[6];    
00049   temp[5]=fMatrix[2]*fMatrix[3] - fMatrix[0]*fMatrix[5];
00050   temp[6]=fMatrix[3]*fMatrix[7] - fMatrix[4]*fMatrix[6]; 
00051   temp[7]=fMatrix[1]*fMatrix[6] - fMatrix[0]*fMatrix[7];    
00052   temp[8]=fMatrix[0]*fMatrix[4] - fMatrix[1]*fMatrix[3];
00053 
00054   *this = (temp) * (1.0/determinant());
00055 }
00056 
00057 //----------------------------------------------------------------------------------------------------------
00058 void THIS::loadIdentity()
00059 {
00060         fMatrix[0]=1.0f; fMatrix[1]=0;    fMatrix[2]=0;
00061         fMatrix[3]=0;    fMatrix[4]=1.0f; fMatrix[5]=0;
00062         fMatrix[6]=0;    fMatrix[7]=0;    fMatrix[8]=1.0f;
00063 }
00064 //----------------------------------------------------------------------------------------------------------
00065 void THIS::makeRotationX(float fA)
00066 {
00067         // 1  0  0  0
00068         // 0  c -s  0
00069         // 0  s  c  0
00070         // 0  0  0  1
00071         float c=cosf(fA);
00072         float s=sinf(fA);
00073         fMatrix[0]=1; fMatrix[1]=0; fMatrix[2]=0; 
00074         fMatrix[3]=0; fMatrix[4]=c; fMatrix[5]=s; 
00075         fMatrix[6]=0; fMatrix[7]=-s; fMatrix[8]=c;
00076 
00077 }
00078 //----------------------------------------------------------------------------------------------------------
00079 void THIS::makeRotationY(float fA)
00080 {
00081         // c  0  s  0
00082         // 0  1  0  0
00083         //-s  0  c  0
00084         // 0  0  0  1
00085         float c=cosf(fA);
00086         float s=sinf(fA);
00087         fMatrix[0]=c; fMatrix[1]=0; fMatrix[2]=-s; 
00088         fMatrix[3]=0; fMatrix[4]=1; fMatrix[5]=0; 
00089         fMatrix[6]=s; fMatrix[7]=0; fMatrix[8]=c; 
00090 }
00091 //----------------------------------------------------------------------------------------------------------
00092 void THIS::makeRotationZ(float fA)
00093 {
00094         // c -s  0  0
00095         // s  c  0  0
00096         // 0  0  1  0
00097         // 0  0  0  1
00098 
00099         float c=cosf(fA);
00100         float s=sinf(fA);
00101         fMatrix[0]=c; fMatrix[1]=s; fMatrix[2]=0; 
00102         fMatrix[3]=-s; fMatrix[4]=c; fMatrix[5]=0; 
00103         fMatrix[6]=0; fMatrix[7]=0; fMatrix[8]=1; 
00104 }
00105 //----------------------------------------------------------------------------------------------------------
00106 void THIS::makeScale(const Vector3D& vScale)
00107 {
00108         fMatrix[0]=vScale[0]; fMatrix[1]=0; fMatrix[2]=0; 
00109         fMatrix[3]=0; fMatrix[4]=vScale[1]; fMatrix[5]=0; 
00110         fMatrix[6]=0; fMatrix[7]=0; fMatrix[8]=vScale[2]; 
00111 }
00112 //----------------------------------------------------------------------------------------------------------
00113 CMat3 THIS::operator*(const CMat3& mat) const
00114 {
00115         CMat3 r;
00116         float* r0=(float*)&r.fMatrix;
00117         float* m2=(float*)&fMatrix;
00118         float* m1=(float*)&mat.fMatrix;
00119 
00120         r0[0]=m1[0]*m2[0]+ m1[1]*m2[3]+ m1[2]*m2[6];
00121         r0[1]=m1[0]*m2[1]+ m1[1]*m2[4]+ m1[2]*m2[7];
00122         r0[2]=m1[0]*m2[2]+ m1[1]*m2[5]+ m1[2]*m2[8];
00123         
00124         r0[3]=m1[3]*m2[0]+ m1[4]*m2[3]+ m1[5]*m2[6];
00125         r0[4]=m1[3]*m2[1]+ m1[4]*m2[4]+ m1[5]*m2[7];
00126         r0[5]=m1[3]*m2[2]+ m1[4]*m2[5]+ m1[5]*m2[8];
00127         
00128         r0[6]=m1[6]*m2[0]+ m1[7]*m2[3]+ m1[8]*m2[6];
00129         r0[7]=m1[6]*m2[1]+ m1[7]*m2[4]+ m1[8]*m2[7];
00130         r0[8]=m1[6]*m2[2]+ m1[7]*m2[5]+ m1[8]*m2[8];
00131         
00132 
00133         return r;
00134 }
00135 //----------------------------------------------------------------------------------------------------------
00136 CMat3 THIS::operator *(float f) const {
00137   CMat3 newMatrix;
00138   for (unsigned i = 0; i < 9; i++) {
00139       newMatrix[i] = fMatrix[i] * f;
00140   }
00141   return newMatrix;
00142 }
00143 //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
00144 
00145 CMat3& THIS::operator *=(float f) {
00146   for (unsigned i = 0; i < 9; i++) {
00147       fMatrix[i] *= f;
00148   }
00149   return *this;
00150 }
00151 //----------------------------------------------------------------------------------------------------------
00152 Vector3D THIS::operator *(const Vector3D& v) const {
00153   Vector3D temp;
00154   temp[0]=fMatrix[0]*v[0]+fMatrix[1]*v[1]+fMatrix[2]*v[2];
00155   temp[1]=fMatrix[3]*v[0]+fMatrix[4]*v[1]+fMatrix[5]*v[2];
00156   temp[2]=fMatrix[6]*v[0]+fMatrix[7]*v[1]+fMatrix[8]*v[2];
00157   return temp;
00158 }
00159 //----------------------------------------------------------------------------------------------------------
00160 CMat3 THIS::operator +(const CMat3& mat) {
00161   CMat3 newMatrix;
00162   for (unsigned i = 0; i < 9; i++) {
00163       newMatrix[i] = mat.valueAt(i) + valueAt(i);
00164   }
00165   return newMatrix;
00166 }
00167 
00168 //----------------------------------------------------------------------------------------------------------
00169 std::string THIS::toString() const
00170 {
00171   std::ostringstream st;
00172   for (int i=0;i<3;i++)
00173   {
00174     for (int j=0;j<3;j++)
00175     {
00176       st<<m[j][i]<<" ";
00177     }
00178     st<<"\n";
00179   }
00180   return st.str();
00181 }
00182 //----------------------------------------------------------------------------------------------------------
00183 float THIS::determinant() const {
00184   return fMatrix[0]*fMatrix[4]*fMatrix[8] + fMatrix[1]*fMatrix[5]*fMatrix[6 ] + fMatrix[2]*fMatrix[3]*fMatrix[7]
00185       - fMatrix[2]*fMatrix[4]*fMatrix[6] - fMatrix[1]*fMatrix[3]*fMatrix[8] - fMatrix[0]*fMatrix[5]*fMatrix[7];
00186 }
00187 //----------------------------------------------------------------------------------------------------------
00188 
00189 #undef THIS


robbie_architecture
Author(s): Viktor Seib
autogenerated on Mon Oct 6 2014 02:53:09