// This file is a part of nla3d project. For information about authors and // licensing go to project's repository on github: // https://github.com/dmitryikh/nla3d #include "Mat.h" namespace nla3d { namespace math { //dMat dMat_tmp(1,1); template<> double Mat<1,1>::det() { return data[0][0]; } template<> double Mat<2,2>::det() { return data[0][0]*data[1][1]-data[0][1]*data[1][0]; } template<> double Mat<3,3>::det() { return data[0][0]*(data[1][1]*data[2][2]-data[1][2]*data[2][1])-data[0][1]*(data[1][0]*data[2][2]-data[1][2]*data[2][0])+data[0][2]*(data[1][0]*data[2][1]-data[1][1]*data[2][0]); } template<> Mat<1,1> Mat<1,1>::inv(double det) { assert(det); return (1.0/det); } template<> Mat<2,2> Mat<2,2>::inv(double det) { assert(det); Mat<2,2> tmp(data[1][1],-data[0][1],-data[1][0],data[0][0]); return tmp*(1.0/det); } template<> Mat<3,3> Mat<3,3>::inv(double det) { assert(det); Mat<3,3> tmp(data[1][1]*data[2][2]-data[1][2]*data[2][1],data[0][2]*data[2][1]-data[0][1]*data[2][2],data[0][1]*data[1][2]-data[0][2]*data[1][1], data[2][0]*data[1][2]-data[1][0]*data[2][2],data[0][0]*data[2][2]-data[0][2]*data[2][0],data[1][0]*data[0][2]-data[0][0]*data[1][2], data[1][0]*data[2][1]-data[1][1]*data[2][0],data[0][1]*data[2][0]-data[0][0]*data[2][1],data[0][0]*data[1][1]-data[0][1]*data[1][0]); return tmp*(1.0/det); } //---------operator<<---------------------------------------------------------- std::ostream &operator<<(std::ostream &stream, dMat &obj) { for (uint16 i = 0; i < obj.dimM; i++) { std::cout << "["; for (uint16 j = 0; j < obj.dimN; j++) std::cout << obj[i][j] << " "; std::cout << "]" << endl; } return stream; } } // namespace math } // namespace nla3d