Pas de dépendances
#include <iostream> #include <math.h> class Vecteur { protected: double x,y,z; public: Vecteur(); Vecteur(const double& a,const double& b,const double& c); double& operator[] (int i); const double& operator[] (int i) const; Vecteur operator+(); Vecteur operator-(); Vecteur& operator+=(const Vecteur&); Vecteur& operator-=(const Vecteur&); Vecteur& operator*=(const Vecteur&); Vecteur& operator/=(const Vecteur&); Vecteur& operator*=(double); Vecteur& operator/=(double); friend Vecteur operator+(const Vecteur&, const Vecteur&); friend Vecteur operator-(const Vecteur&, const Vecteur&); friend double operator* (const Vecteur&, const Vecteur&); friend Vecteur operator* (const Vecteur&, double); friend Vecteur operator* (double, const Vecteur&); friend Vecteur operator/ (const Vecteur&, double); friend Vecteur operator/ (const Vecteur&, const Vecteur&); friend int operator==(const Vecteur&,const Vecteur&); friend int operator!=(const Vecteur&,const Vecteur&); friend int operator<(const Vecteur&,const Vecteur&); friend int operator>(const Vecteur&,const Vecteur&); friend Vecteur Orthogonal(const Vecteur&); friend double Norm(const Vecteur&); friend std::ostream& operator<<(std::ostream&,const Vecteur&); }; using namespace std; // IMPLEMENTATION Vecteur::Vecteur() { x=y=z=0.0; } Vecteur::Vecteur(const double& a,const double& b,const double& c) { x=a; y=b; z=c; } double& Vecteur::operator[] (int i) { if (i == 0) return x; else if (i == 1) return y; else return z; } const double& Vecteur::operator[] (int i) const { if (i == 0) return x; else if (i == 1) return y; else return z; } Vecteur Vecteur::operator+ () { return *this; } Vecteur Vecteur::operator- () { return Vecteur(-x,-y,-z); } Vecteur& Vecteur::operator+= (const Vecteur& u) { x+=u.x; y+=u.y; z+=u.z; return *this; } Vecteur& Vecteur::operator-= (const Vecteur& u) { x-=u.x; y-=u.y; z-=u.z; return *this; } Vecteur& Vecteur::operator*= (double a) { x*=a; y*=a; z*=a; return *this; } Vecteur& Vecteur::operator/= (double a) { x/=a; y/=a; z/=a; return *this; } Vecteur& Vecteur::operator*= (const Vecteur& u) { x*=u.x; y*=u.y; z*=u.z; return *this; } Vecteur& Vecteur::operator/= (const Vecteur& u) { x/=u.x; y/=u.y; z/=u.z; return *this; } Vecteur operator+ (const Vecteur& u, const Vecteur& v) { return Vecteur(u.x+v.x,u.y+v.y,u.z+v.z); } Vecteur operator- (const Vecteur& u, const Vecteur& v) { return Vecteur(u.x-v.x,u.y-v.y,u.z-v.z); } // Produit scalaire double operator* (const Vecteur& u, const Vecteur& v) { return (u.x*v.x+u.y*v.y+u.z*v.z); } Vecteur operator* (const Vecteur& u,double a) { return Vecteur(u.x*a,u.y*a,u.z*a); } Vecteur operator* (double a, const Vecteur& v) { return v*a; } // produit Vectoriel Vecteur operator/ (const Vecteur& u, const Vecteur& v) { return Vecteur(u.y*v.z-u.z*v.y,u.z*v.x-u.x*v.z,u.x*v.y-u.y*v.x); } Vecteur operator/ (const Vecteur& u, double a) { return Vecteur(u.x/a,u.y/a,u.z/a); } int operator== (const Vecteur& u,const Vecteur& v) { return ((u.x==v.x)&&(u.y==v.y)&&(u.z==v.z)); } int operator!= (const Vecteur& u,const Vecteur& v) { return (!(u==v)); } double Norm(const Vecteur& u) { return sqrt(u.x*u.x+u.y*u.y+u.z*u.z); } int operator<(const Vecteur& a,const Vecteur& b) { return ((a.x<b.x)&&(a.y<b.y)&&(a.z<b.z)); } int operator>(const Vecteur& a,const Vecteur& b) { return ((a.x>b.x)&&(a.y>b.y)&&(a.z>b.z)); } Vecteur Orthogonal(const Vecteur& u) { Vecteur a=Vecteur(fabs(u[0]),fabs(u[1]),fabs(u[2])); int i=0; int j=1; if (a[0]>a[1]) { if (a[2]>a[1]) { j=2; } } else { i=1; j=2; if (a[0]>a[2]) { j=0; } } a=Vecteur(0.0,0.0,0.0); a[i]=u[j]; a[j]=-u[i]; return a; } std::ostream& operator<<(std::ostream& os,const Vecteur& v) { return os << "(" << v.x << "," << v.y << "," << v.z << ")"; } // PROGRAMME PRINCIPALE int main() { Vecteur a(1,0,0); Vecteur b(0,1,0); Vecteur c=a/b; cout << "3e vecteur de base : " << c << endl; a+=b; a/=2.0; cout << "produit scalaire entre a " << a << " et b " << b << " = " << a*b << endl; cout << "norme de a = " << Norm(a) << endl; cout << "je rappelle la valeur du vecteur a : " << a << endl; cout << "un vecteur orthogonal au vecteur a : " << Orthogonal(a) << endl; system("Pause"); return 0; }
No explanations yet.