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

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

#include "CH3D.h"
#include "Pos3D.h"

/* Constructeurs                                */

Pos3D::Pos3D(void):CH3D(0.0,0.0,0.0,1.0) {
}

Pos3D::Pos3D(double x,double y,double z):CH3D(x,y,z,1.0) {
}

Pos3D::Pos3D(Pos3D *p):CH3D(p) {
}

/* Destructeur                                  */

Pos3D::~Pos3D(void) {
}

/* Fonction de calcul du carre de la distance   */
/* entre les deux positions p1 et p2            */

static double carreDistance(Pos3D *p1,Pos3D *p2) {
  double dx = p2->x-p1->x;
  double dy = p2->y-p1->y;
  double dz = p2->z-p1->z;
  return(dx*dx+dy*dy+dz*dz);
}

/* Methode de calcul de la distance             */
/* entre les deux positions this et p           */

double Pos3D::distance(Pos3D *p) {
  return(sqrt(carreDistance(this,p)));
}

/* Methode statique de calcul de la distance    */
/* entre les deux positions p1 et p2            */

double Pos3D::distance(Pos3D *p1,Pos3D *p2) {
  return(sqrt(carreDistance(p1,p2)));
}
