L'exécutable

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]; }
}

RETOUR