Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

C:/temp/src/j2k/Beta/Math/Vector/Matrix33.cpp

Go to the documentation of this file.
00001 /*
00002 Definition for a 3 by 3 matrix:
00003 e.g.  |1 4 7|
00004       |2 5 8|
00005       |3 6 9|
00006 */
00007 
00008 
00009 #ifndef __J2K__Matrix33_CPP__
00010 #define __J2K__Matrix33_CPP__
00011 
00012 #include <j2k/Fred/Games/Matrix33.hpp>
00013 
00014 JMatrix33::JMatrix33(const Matrix22& mat) {
00015   m[0] = mat.m[0];
00016   m[1] = mat.m[1];
00017   m[2] = 0;
00018   m[3] = mat.m[2];
00019   m[4] = mat.m[3];
00020   m[5] = 0;
00021   m[6] = 0;
00022   m[7] = 0;
00023   m[8] = 1;
00024 }
00025 
00026 JMatrix33::JMatrix33(const JMatrix33& mat) {
00027   for( int i = 0; i < 9; i++ ) {
00028     m[ i ] = mat.m[ i ];
00029   }
00030 }
00031 
00032 void JMatrix33::print() {
00033   printf("| %-+7.2f %-+7.2f %-+7.2f|\n",   m[0], m[3], m[6] );
00034   printf("| %-+7.2f %-+7.2f %-+7.2f|\n",   m[1], m[4], m[7] );
00035   printf("| %-+7.2f %-+7.2f %-+7.2f|\n\n", m[2], m[5], m[8] );
00036 }
00037 
00038 void JMatrix33::identity() {
00039   m[0] = 1;
00040   m[1] = 0;
00041   m[2] = 0;
00042 
00043   m[3] = 0;
00044   m[4] = 1;
00045   m[5] = 0;
00046 
00047   m[6] = 0;
00048   m[7] = 0;
00049   m[8] = 1;
00050 }
00051 
00052 JMatrix33 JMatrix33::rotx( double rad ) {
00053   JMatrix33 ret;
00054   double c = cos(rad);
00055   double s = sin(rad);
00056 
00057   ret.m[0] = 1;
00058   ret.m[1] = 0;
00059   ret.m[2] = 0;
00060 
00061   ret.m[3] =  0;
00062   ret.m[4] =  c;
00063   ret.m[5] = -s;
00064 
00065   ret.m[6] = 0;
00066   ret.m[7] = s;
00067   ret.m[8] = c;
00068 
00069   return ret;
00070 }
00071 
00072 JMatrix33 JMatrix33::roty( double rad ) {
00073   JMatrix33 ret;
00074   double c = cos(rad);
00075   double s = sin(rad);
00076 
00077   ret.m[0] =  c;
00078   ret.m[1] =  0;
00079   ret.m[2] = -s;
00080 
00081   ret.m[3] = 0;
00082   ret.m[4] = 1;
00083   ret.m[5] = 0;
00084 
00085   ret.m[6] = s;
00086   ret.m[7] = 0;
00087   ret.m[8] = c;
00088 
00089   return ret;
00090 }
00091 
00092 JMatrix33 JMatrix33::rotz( double rad ) {
00093   JMatrix33 ret;
00094   double c = cos(rad);
00095   double s = sin(rad);
00096 
00097   ret.m[0] =  c;
00098   ret.m[1] = -s;
00099   ret.m[2] =  0;
00100 
00101   ret.m[3] = s;
00102   ret.m[4] = c;
00103   ret.m[5] = 0;
00104 
00105   ret.m[6] = 0;
00106   ret.m[7] = 0;
00107   ret.m[8] = 1;
00108 
00109   return ret;
00110 }
00111 
00112 JMatrix33 JMatrix33::rotxyz(const JVector3& euler ) {
00113   JMatrix33 ret;
00114   double a = cos(euler.v[0]);
00115   double b = sin(euler.v[0]);
00116 
00117   double c = cos(euler.v[1]);
00118   double d = sin(euler.v[1]);
00119 
00120   double e = cos(euler.v[2]);
00121   double f = sin(euler.v[2]);
00122 
00123   double ad = a * d;
00124   double bd = b * d;
00125 
00126   ret.m[0] =  c * e;
00127   ret.m[1] = -c * f;
00128   ret.m[2] = -d;
00129 
00130   ret.m[3] = -bd * e + a * f;
00131   ret.m[4] =  bd * f + a * e;
00132   ret.m[5] = -b * c;
00133 
00134   ret.m[6] =  ad * e + b * f;
00135   ret.m[7] = -ad * f + b * e;
00136   ret.m[8] =   a * c;
00137 
00138   return ret;
00139 }
00140 
00141 JMatrix33 JMatrix33::mult(const JMatrix33& mat) {
00142   JMatrix33 ret;
00143 
00144   ret.m[0] = m[0] * mat.m[0] + m[1] * mat.m[3] + m[2] * mat.m[6];
00145   ret.m[1] = m[0] * mat.m[1] + m[1] * mat.m[4] + m[2] * mat.m[7];
00146   ret.m[2] = m[0] * mat.m[2] + m[1] * mat.m[5] + m[2] * mat.m[8];
00147 
00148   ret.m[3] = m[3] * mat.m[0] + m[4] * mat.m[3] + m[5] * mat.m[6];
00149   ret.m[4] = m[3] * mat.m[1] + m[4] * mat.m[4] + m[5] * mat.m[7];
00150   ret.m[5] = m[3] * mat.m[2] + m[4] * mat.m[5] + m[5] * mat.m[8];
00151 
00152   ret.m[6] = m[6] * mat.m[0] + m[7] * mat.m[3] + m[8] * mat.m[6];
00153   ret.m[7] = m[6] * mat.m[1] + m[7] * mat.m[4] + m[8] * mat.m[7];
00154   ret.m[8] = m[6] * mat.m[2] + m[7] * mat.m[5] + m[8] * mat.m[8];
00155 
00156   return ret;
00157 }
00158 
00159 Vector2 JMatrix33::mult(const Vector2& src) {
00160   Vector2 ret;
00161   double div = m[6] * src.v[0] + m[7] * src.v[1] + m[8] * src.v[2];
00162 
00163   ret.v[0] = (m[0] * src.v[0] + m[1] * src.v[1] + m[2] * src.v[2]) / div;
00164   ret.v[1] = (m[3] * src.v[0] + m[4] * src.v[1] + m[5] * src.v[2]) / div;
00165 
00166   return ret;
00167 }
00168 
00169 JVector3 JMatrix33::mult(const JVector3& src) {
00170   JVector3 ret;
00171 
00172   ret.v[0] = m[0] * src.v[0] + m[1] * src.v[1] + m[2] * src.v[2];
00173   ret.v[1] = m[3] * src.v[0] + m[4] * src.v[1] + m[5] * src.v[2];
00174   ret.v[2] = m[6] * src.v[0] + m[7] * src.v[1] + m[8] * src.v[2];
00175 
00176   return ret;
00177 }
00178 
00179 #endif

Generated on Sun Oct 14 18:46:14 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001