/* nicolas.janey@univ-fcomte.fr */ /* Novembre 2005 */ /* Classe de gestion */ /* de transformations geometriques */ /* en coordonnees homogenes */ #include #include "TransformationT.h" #include "VecteurT.h" TransformationT::TransformationT(void) { for ( int i = 0 ; i < 4 ; i++ ) for ( int j = 0 ; j < 4 ; j++ ) m[i][j] = ( i == j ) ? 1.0F : 0.0F; } TransformationT::TransformationT(float m[4][4]) { for ( int i = 0 ; i < 4 ; i++ ) for ( int j = 0 ; j < 4 ; j++ ) this->m[i][j] = m[i][j]; } TransformationT::~TransformationT(void) { } void TransformationT::compose(VecteurT *v) { VecteurT *nv = new VecteurT(); for ( int i = 0 ; i < 4 ; i++ ) for ( int j = 0 ; j < 4 ; j++ ) nv->m[i] += m[i][j]*v->m[j]; *v = *nv; delete(nv); } void TransformationT::compose(TransformationT *t) { TransformationT *nt = new TransformationT(); { for ( int i = 0 ; i < 4 ; i++ ) for ( int j = 0 ; j < 4 ; j++ ) { nt->m[i][j] = 0; for ( int k = 0 ; k < 4 ; k++ ) nt->m[i][j] += t->m[i][k]*m[k][j]; } } { for ( int i = 0 ; i < 4 ; i++ ) for ( int j = 0 ; j < 4 ; j++ ) m[i][j] = nt->m[i][j]; } delete(nt); } void TransformationT::print(void) { for ( int i = 0 ; i < 4 ; i++ ) printf("%8.3f%8.3f%8.3f%8.3f\n",m[i][0],m[i][1],m[i][2],m[i][3]); }