Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "fMatrix4.h"
00015
00016 void fVec4::cross(const fVec4& vec1, const fVec4& vec2)
00017 {
00018 m_scalar = vec1.m_scalar*vec2.m_scalar - vec1.m_vec*vec2.m_vec;
00019 m_vec.cross(vec1.m_vec, vec2.m_vec);
00020 m_vec += vec1.m_scalar*vec2.m_vec;
00021 m_vec += vec2.m_scalar*vec1.m_vec;
00022 }
00023
00024 ostream& operator << (ostream& ost, const fVec4& mat)
00025 {
00026 ost << "(" << mat.m_scalar << " [" << mat.m_vec(0) << " " << mat.m_vec(1) << " " << mat.m_vec(2) << "])" << flush;
00027 return ost;
00028 }
00029
00030 double& fMat44::operator () (int i, int j)
00031 {
00032 #ifndef NDEBUG
00033 if(i < 0 || i >= 4 || j < 0 || j >= 4)
00034 {
00035 cerr << "matrix size error at operator ()" << endl;
00036 return temp;
00037 }
00038 #endif
00039 if(i<3 && j<3) return m_mat(i,j);
00040 else if(i<3 && j==3) return m_vec(i);
00041 else if(i==3 && j==3) return m_scalar;
00042 else return temp;
00043 }
00044
00045 double fMat44::operator () (int i, int j) const
00046 {
00047 #ifndef NDEBUG
00048 if(i < 0 || i >= 4 || j < 0 || j >= 4)
00049 {
00050 cerr << "matrix size error at operator ()" << endl;
00051 return temp;
00052 }
00053 #endif
00054 if(i<3 && j<3) return m_mat(i,j);
00055 else if(i<3 && j==3) return m_vec(i);
00056 else if(i==3 && j==3) return m_scalar;
00057 else return temp;
00058 }
00059
00060 void fMat44::operator = (double d)
00061 {
00062 m_mat = d;
00063 m_vec = d;
00064 m_scalar = d;
00065 }
00066
00067 fMat44 fMat44::operator = (const fMat44& mat)
00068 {
00069 m_mat = mat.m_mat;
00070 m_vec = mat.m_vec;
00071 m_scalar = mat.m_scalar;
00072 return *this;
00073 }
00074
00075 void fMat44::operator += (const fMat44& m)
00076 {
00077 m_mat += m.m_mat;
00078 m_vec += m.m_vec;
00079 m_scalar += m.m_scalar;
00080 }
00081
00082 void fMat44::operator -= (const fMat44& m)
00083 {
00084 m_mat -= m.m_mat;
00085 m_vec -= m.m_vec;
00086 m_scalar -= m.m_scalar;
00087 }
00088
00089 void fMat44::operator *= (double d)
00090 {
00091 m_mat *= d;
00092 m_vec *= d;
00093 m_scalar *= d;
00094 }
00095
00096 void fMat44::operator /= (double d)
00097 {
00098 m_mat /= d;
00099 m_vec /= d;
00100 m_scalar /= d;
00101 }
00102
00103 fMat44 operator - (const fMat44& m)
00104 {
00105 fMat44 ret;
00106 ret.m_mat = - m.m_mat;
00107 ret.m_vec = - m.m_vec;
00108 ret.m_scalar = - m.m_scalar;
00109 return ret;
00110 }
00111
00112 fMat44 operator * (const fMat44& m1, const fMat44& m2)
00113 {
00114 fMat44 ret;
00115 ret.m_mat = m1.m_mat * m2.m_mat;
00116 ret.m_vec = m1.m_mat * m2.m_vec + m1.m_vec * m2.m_scalar;
00117 ret.m_scalar = m1.m_scalar * m2.m_scalar;
00118 return ret;
00119 }
00120
00121 fMat44 operator + (const fMat44& m1, const fMat44& m2)
00122 {
00123 fMat44 ret;
00124 ret.m_mat = m1.m_mat + m2.m_mat;
00125 ret.m_vec = m1.m_vec + m2.m_vec;
00126 ret.m_scalar = m1.m_scalar + m2.m_scalar;
00127 return ret;
00128 }
00129
00130 fMat44 operator - (const fMat44& m1, const fMat44& m2)
00131 {
00132 fMat44 ret;
00133 ret.m_mat = m1.m_mat - m2.m_mat;
00134 ret.m_vec = m1.m_vec - m2.m_vec;
00135 ret.m_scalar = m1.m_scalar - m2.m_scalar;
00136 return ret;
00137 }
00138
00139 fVec4 operator * (const fMat44& m, const fVec4& v)
00140 {
00141 fVec4 ret, tmp(v);
00142 ret.Vec() = m.m_mat * tmp.Vec() + m.m_vec * tmp.Scalar();
00143 ret.Scalar() = m.m_scalar * tmp.Scalar();
00144 return ret;
00145 }
00146
00147
00148
00149
00150 void fVec4::sub(const fVec4& vec1, const fVec4& vec2)
00151 {
00152 m_scalar = vec1.m_scalar - vec2.m_scalar;
00153 m_vec.sub(vec1.m_vec, vec2.m_vec);
00154 }
00155
00156 void fVec4::add(const fVec4& vec1, const fVec4& vec2)
00157 {
00158 m_scalar = vec1.m_scalar + vec2.m_scalar;
00159 m_vec.add(vec1.m_vec, vec2.m_vec);
00160 }
00161
00162 void fVec4::mul(fVec4& _vec, double d)
00163 {
00164 m_vec.mul(_vec.m_vec, d);
00165 m_scalar = _vec.m_scalar * d;
00166 }
00167
00168 double& fVec4::operator () (int i)
00169 {
00170 #ifndef NDEBUG
00171 if(i < 0 || i >= 4)
00172 {
00173 cerr << "vector size error at operator ()" << endl;
00174 return temp;
00175 }
00176 #endif
00177 if(i<3) return m_vec(i);
00178 else if(i==3) return m_scalar;
00179 else return temp;
00180 }
00181
00182 double fVec4::operator () (int i) const
00183 {
00184 #ifndef NDEBUG
00185 if(i < 0 || i >= 4)
00186 {
00187 cerr << "vector size error at operator ()" << endl;
00188 return temp;
00189 }
00190 #endif
00191 if(i<3) return m_vec(i);
00192 else if(i==3) return m_scalar;
00193 else return temp;
00194 }
00195
00196 fVec4 fVec4::operator = (const fVec4& vec)
00197 {
00198 m_vec = vec.m_vec;
00199 m_scalar = vec.m_scalar;
00200 return (*this);
00201 }
00202
00203 void fVec4::operator = (double d)
00204 {
00205 int i;
00206 for(i=0; i<4; i++) (*this)(i) = d;
00207 }
00208
00209 void fVec4::operator += (const fVec4& vec)
00210 {
00211 m_vec += vec.m_vec;
00212 m_scalar += vec.m_scalar;
00213 }
00214
00215 void fVec4::operator -= (const fVec4& vec)
00216 {
00217 m_vec -= vec.m_vec;
00218 m_scalar -= vec.m_scalar;
00219 }
00220
00221 void fVec4::operator *= (double d)
00222 {
00223 m_vec *= d;
00224 m_scalar *= d;
00225 }
00226
00227 void fVec4::operator /= (double d)
00228 {
00229 m_vec /= d;
00230 m_scalar /= d;
00231 }
00232
00233 fVec4 operator - (const fVec4& vec)
00234 {
00235 fVec4 ret;
00236 ret.m_vec -= vec.m_vec;
00237 ret.m_scalar -= vec.m_scalar;
00238 return ret;
00239 }
00240
00241 double operator * (const fVec4& v1, const fVec4& v2)
00242 {
00243 return (v1.m_vec * v2.m_vec + v1.m_scalar * v2.m_scalar);
00244 }
00245
00246 fVec4 operator * (double d, const fVec4& v)
00247 {
00248 fVec4 ret;
00249 ret.m_vec = d * v.m_vec;
00250 ret.m_scalar = d * v.m_scalar;
00251 return ret;
00252 }
00253
00254 fVec4 operator + (const fVec4& v1, const fVec4& v2)
00255 {
00256 fVec4 ret;
00257 ret.m_vec = v1.m_vec + v2.m_vec;
00258 ret.m_scalar = v1.m_scalar + v2.m_scalar;
00259 return ret;
00260 }
00261
00262 fVec4 operator - (const fVec4& v1, const fVec4& v2)
00263 {
00264 fVec4 ret;
00265 ret.m_vec = v1.m_vec - v2.m_vec;
00266 ret.m_scalar = v1.m_scalar - v2.m_scalar;
00267 return ret;
00268 }
00269
00270 void fVec4::zero()
00271 {
00272 m_vec.zero();
00273 m_scalar = 0;
00274 }