Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
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
00068
00069
00070
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
00082
00083
00084
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
00095
00096
00097
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