/* Mathematiques de l'informatique graphique */ /* Direction en 3D */ /* */ /* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Mars 2019 */ #include #include #include #include "CH3D.h" #include "Dir3D.h" #include "Pos3D.h" /* Constructeurs */ Dir3D::Dir3D(void):CH3D(0.0,0.0,0.0,0.0) { } Dir3D::Dir3D(double x,double y,double z):CH3D(x,y,z,0.0) { } Dir3D::Dir3D(Dir3D *p):CH3D(p) { } Dir3D::Dir3D(Pos3D *pi,Pos3D *pf):CH3D() { v.x = pf->getx()-pi->getx(); v.y = pf->gety()-pi->gety(); v.z = pf->getz()-pi->getz(); v.w = 0.0; } /* Destructeur */ Dir3D::~Dir3D(void) { } /* Setters */ bool Dir3D::setw(double w) { return false; } bool Dir3D::set(double val,int i) { if ( ( i >= 0 ) && ( i < 3 ) ) { v.c[i] = val; return true; } return false; } /* Methode de calcul de la norme de this */ double Dir3D::norme(void) { return(sqrt(v.x*v.x+v.y*v.y+v.z*v.z)); } /* Methode de normalisation de this */ void Dir3D::normalisation(void) { double d = norme(); if ( d != 0.0 ) { v.x /= d; v.y /= d; v.z /= d; } } /* Methode de calcul du produit scalaire */ /* de this et de la direction d */ double Dir3D::produitScalaire(Dir3D *d) { return(v.x*d->v.x+v.y*d->v.y+v.z*d->v.z); } /* Methode de calcul du produit vectoriel */ /* de this par la direction d */ /* avec stockage du resultat dans this */ /* this = this ^ d */ void Dir3D::produitVectoriel(Dir3D *d) { produitVectoriel(this,d); } /* Methode de calcul du produit vectoriel */ /* de deux directions d1 et d2 */ /* avec stockage du resultat dans this */ /* this = d1 ^ d2 */ void Dir3D::produitVectoriel(Dir3D *d1,Dir3D *d2) { double x = d1->v.y*d2->v.z - d1->v.z*d2->v.y; double y = d1->v.z*d2->v.x - d1->v.x*d2->v.z; double z = d1->v.x*d2->v.y - d1->v.y*d2->v.x; v.x = x; v.y = y; v.z = z; }