00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <TransformMatrix.hpp>
00021 #include <cmath>
00022
00023 #include <sstream>
00024
00025 TinyVector<3,real_t> TransformMatrix::
00026 operator()(const TinyVector<3,real_t>& v) const
00027 {
00028 TinyVector<3,real_t> temp = __matrix*v;
00029 temp += __translate;
00030 return temp;
00031 }
00032
00033 TinyVector<3,real_t> TransformMatrix::
00034 inverse(const TinyVector<3,real_t>& v) const
00035 {
00036
00037
00038
00039 TinyVector<3,real_t> Temporary = v - __translate;
00040
00041 return __invMatrix*Temporary;
00042 }
00043
00044 TransformMatrix::
00045 TransformMatrix(const real_t m[12])
00046 : Transform(matrix)
00047 {
00048 for (size_t i=0;i<3;++i) {
00049 __translate[i] = m[9+i];
00050 for (size_t j=0; j<3; ++j) {
00051 __matrix(i,j) = m[3*i+j];
00052 }
00053 }
00054
00055 __invMatrix = __matrix.invert();
00056 }
00057
00058 TransformMatrix::
00059 TransformMatrix(const TransformMatrix& r)
00060 : Transform(r)
00061 {
00062 __translate = r.__translate;
00063 __matrix = r.__matrix;
00064 __invMatrix = r.__invMatrix;
00065 }
00066
00067 std::string TransformMatrix::
00068 povWrite() const
00069 {
00070 std::stringstream povs;
00071 povs << "transformMatrix <";
00072 for (size_t i=0; i<3; ++i) {
00073 for(size_t j=0; j<3; ++j) {
00074 povs << __matrix(i,j) << ',';
00075 }
00076 }
00077 for (size_t i=0; i<2; ++i)
00078 povs << __translate << ',';
00079 povs << __translate[2];
00080 povs << ">";
00081 povs << std::ends;
00082 return povs.str();
00083 }
00084
00085 ReferenceCounting<Transform> TransformMatrix::
00086 getCopy() const
00087 {
00088 return new TransformMatrix(*this);
00089 }