Fichier source : RotationCube.cpp
Fichier source : TransformationGeometrique3D.cpp
/* Mathematiques de l'informatique graphique */
/* Transformation geometrique en 3D */
/* */
/* Auteur: Nicolas JANEY */
/* nicolas.janey@univ-fcomte.fr */
/* Octobre 2012 */
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#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]; }
}