/* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Octobre 2005 */ /* Classe de gestion de directions 3D */ /* en coordonnees homogenes */ #include #include #include "ModuleFont.h" #include "Direction.h" #include "Position.h" Direction::Direction(void) : Vecteur(0.0F,0.0F,0.0F,0.0F) { } Direction::Direction(float x,float y,float z) : Vecteur(x,y,z,0.0F) { } Direction::Direction(Position *p1,Position *p2) : Vecteur(p2->x-p1->x,p2->y-p1->y,p2->z-p1->z,0.0F) { } Direction::Direction(Direction *d) : Vecteur(d->x,d->y,d->z,1.0F) { } Direction::~Direction(void) { } float Direction::norme() { return((float) pow(pow((double) x,2.0)+pow((double) y,2.0)+pow((double) z,2.0),0.5)); } void Direction::normalise(void) { float n = norme(); if ( n != 0 ) { x /= n; y /= n; z /= n; } } float Direction::produitScalaire(Direction *d2) { return(x*d2->x+y*d2->y+z*d2->z); } void Direction::produitVectoriel(Direction *d1,Direction *d2) { Direction *d = new Direction(d1->y*d2->z-d1->z*d2->y, d1->z*d2->x-d1->x*d2->z, d1->x*d2->y-d1->y*d2->x); x = d->x; y = d->y; z = d->z; t = 0.0F; delete(d); } int Direction::estVecteurNul(void) { if ( fabs(x) > 0.000001F ) return(0); if ( fabs(y) > 0.000001F ) return(0); if ( fabs(z) > 0.000001F ) return(0); return(1); } int Direction::estColineaire(Direction *d2) { Direction *pv = new Direction(); pv->produitVectoriel(d2,this); if ( fabs(pv->x) > 0.000001F ) return(0); if ( fabs(pv->y) > 0.000001F ) return(0); if ( fabs(pv->z) > 0.000001F ) return(0); return(1); }