00001
00002
00003
00004
00005
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