#include "algebre.h" using namespace std; /****************************************************************************/ // En cas de bug : static void erreur(string mesg) { cout << "----------------------------\n"; cout << " plantage algebre.cpp :\n"; cout << " -- " << mesg << endl; exit(1); } /****************************************************************************/ GLboolean isNulEpsilon(float x) { return(fabs(x)<1.0E-07); } /****************************************************************************/ /****************************************************************************/ /** classe Vecteur3d */ void Vecteur3d::init() { resize(3); } Vecteur3d::Vecteur3d(float x, float y, float z, bool normalise) { init(); set(x,y,z,normalise); } Vecteur3d::Vecteur3d(const Point3d &p1,const Point3d &p2) { init(); set(p2.x()-p1.x(),p2.y()-p1.y(),p2.z()-p1.z()); } void Vecteur3d::set(float x, float y, float z, bool normalise) { (*this)[0]=x; (*this)[1]=y; (*this)[2]=z; if (normalise) normaliser(); } double Vecteur3d::norme() { return sqrt((*this)[0]*(*this)[0]+(*this)[1]*(*this)[1]+(*this)[2]*(*this)[2]); } void Vecteur3d::normaliser() { float d=sqrt((*this)[0]*(*this)[0]+(*this)[1]*(*this)[1]+(*this)[2]*(*this)[2]); if (isNulEpsilon(d)) { this->print(); erreur("normalisation d'un vecteur nul !"); } (*this)[0]/=d; (*this)[1]/=d; (*this)[2]/=d; } void Vecteur3d::scale(float kx,float ky,float kz) { set(x()*kx,y()*ky,z()*kz); } void Vecteur3d::scale(float k) { set(x()*k,y()*k,z()*k); } void Vecteur3d::translate(float xx,float yy, float zz) { set(x()+xx,y()+yy,z()+zz); } GLfloat *Vecteur3d::fv() const { return (GLfloat *)(&(this->front())); } void Vecteur3d::print() { Vecteur3d p=*this; cout << p[0] << "," << p[1] << "," << p[2] << endl; } void AVecteur3d::clean() { for(ItVecteur3d i=begin();i(nb_normal)); if (n.norme()>0.0001) n.normaliser(); }