/* Mathematiques de l'informatique graphique    */
/* Coordonnees homogenes en 3D                  */
/*                                              */
/* Auteur: Nicolas JANEY                        */
/* nicolas.janey@univ-fcomte.fr                 */
/* Mars 2020                                    */

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

#include "CH3D.h"
#include "TG3D.h"

/* Construit le vecteur nul                     */

CH3D::CH3D(void) {
  x = y = z = w = 0.0F;
}

/* Construit la CH3D (x,y,z,w)                  */

CH3D::CH3D(float x,float y,float z,float w) {
  this->x = x;
  this->y = y;
  this->z = z;
  this->w = w;
}

/* Construit un clone de la CH3D ch             */

CH3D::CH3D(CH3D *ch) {
  x = ch->x;
  y = ch->y;
  z = ch->z;
  w = ch->w;
}

/* Destructeur                                  */

CH3D::~CH3D(void) {
}

/* Methode d'affichage texte                    */

void CH3D::print(void) {
  printf("%10.4f %10.4f %10.4f %10.4f",x,y,z,w);
}

/* Methode d'affichage texte                */
/* precede d'un message                     */
/* et suivi d'un message                    */

void CH3D::print(const char *messageAvant,const char *messageApres) {
  printf("%s",messageAvant);
  print();
  printf("%s",messageApres);
}

/* Methode de transformation de this            */
/* par une transformation geometrique           */

void CH3D::transformation(TG3D *tg) {
  float vx,vy,vz,vw;
  vx = tg->c[0][0]*x+tg->c[0][1]*y+tg->c[0][2]*z+tg->c[0][3]*w;
  vy = tg->c[1][0]*x+tg->c[1][1]*y+tg->c[1][2]*z+tg->c[1][3]*w;
  vz = tg->c[2][0]*x+tg->c[2][1]*y+tg->c[2][2]*z+tg->c[2][3]*w;
  vw = tg->c[3][0]*x+tg->c[3][1]*y+tg->c[3][2]*z+tg->c[3][3]*w;
  x = vx;
  y = vy;
  z = vz;
  w = vw;
}
