/* Mathematiques de l'informatique graphique */ /* Transformation geometrique en 3D */ /* */ /* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Octobre 2012 */ #include #include #include #include "TransformationGeometrique3D.h" #include "CoordonneesHomogenes3D.h" /* Constructeurs */ TransformationGeometrique3D::TransformationGeometrique3D(void) { for ( int i = 0 ; i < 4 ; i++ ) for ( int j = 0 ; j < 4 ; j++ ) c[i][j] =( i == j ) ? 1.0 : 0.0; } TransformationGeometrique3D::TransformationGeometrique3D(double *t) { int k = 0; for ( int i = 0 ; i < 4 ; i++ ) for ( int j = 0 ; j < 4 ; j++ ) { c[i][j] = t[k]; k++; } } TransformationGeometrique3D::TransformationGeometrique3D(double **t) { for ( int i = 0 ; i < 4 ; i++ ) for ( int j = 0 ; j < 4 ; j++ ) c[i][j] = t[i][j]; } TransformationGeometrique3D::TransformationGeometrique3D(TransformationGeometrique3D *tg) { for ( int i = 0 ; i < 4 ; i++ ) for ( int j = 0 ; j < 4 ; j++ ) c[i][j] = tg->c[i][j]; } /* Destructeur */ TransformationGeometrique3D::~TransformationGeometrique3D(void) { } /* Methodes */ void TransformationGeometrique3D::print(void) { for ( int i = 0 ; i < 4 ; i++ ) printf("%10.4lf %10.4lf %10.4lf %10.4lf\n",c[i][0],c[i][1],c[i][2],c[i][3]); } void TransformationGeometrique3D::compose(TransformationGeometrique3D *t1,TransformationGeometrique3D *t2) { double c[4][4]; for ( int i = 0 ; i < 4 ; i++ ) for ( int j = 0 ; j < 4 ; j++ ) { c[i][j] = 0.0; for ( int k = 0 ; k < 4 ; k++ ) c[i][j] += t1->c[i][k]*t2->c[k][j]; } for ( int i = 0 ; i < 4 ; i++ ) for ( int j = 0 ; j < 4 ; j++ ) this->c[i][j] = c[i][j]; } void TransformationGeometrique3D::compose(TransformationGeometrique3D *tg) { double aux[4][4]; for ( int i = 0 ; i < 4 ; i++ ) for ( int j = 0 ; j < 4 ; j++ ) { aux[i][j] = 0.0; for ( int k = 0 ; k < 4 ; k++ ) aux[i][j] += tg->c[i][k]*c[k][j]; } for ( int i = 0 ; i < 4 ; i++ ) for ( int j = 0 ; j < 4 ; j++ ) c[i][j] = aux[i][j]; } void TransformationGeometrique3D::transforme(CoordonneesHomogenes3D *ch) { double t[4]; for ( int i = 0 ; i < 4 ; i++ ) { t[i] = 0.0; for ( int k = 0 ; k < 4 ; k++ ) t[i] += c[i][k]*ch->c[k]; } for ( int i = 0 ; i < 4 ; i++ ) { ch->c[i] = t[i]; } }