V_3D.h

Go to the documentation of this file.
00001 /*
00002 ** V_3D.h
00003 ** 
00004 ** Made by damien
00005 ** Login   <damien@ortie>
00006 ** 
00007 ** Started on  Fri Jan 25 11:12:12 2008 damien
00008 ** Last update Fri Jan 25 11:12:12 2008 damien
00009 */
00010 
00011 #ifndef         V_3D_H_
00012 # define        V_3D_H_
00013 
00014 #include <stdlib.h>
00015 #include <iostream>
00016 #include <cmath>
00017 #include <string>
00018 #include <errno.h>
00019 #include <stdio.h>
00020 using namespace std;
00021 
00022 class V_3D
00023 {
00024  public:
00025   V_3D();
00026   V_3D(const V_3D &v_3D);
00027   V_3D(double x,double y,double z);
00028   ~V_3D();
00029 
00030 
00031   int set(double *v);
00032   int set(int k_dim,double value);
00033   int set(V_3D _V);
00034   int set(double x,double y,double z);
00035 
00036   double get(int k_dim) const;
00037   int    get(double *v) const;
00038   V_3D   get() const;
00039   double *get_pointer();
00040 
00041 
00042 
00043   double dot(V_3D _v) const;
00044   V_3D vector_prod(V_3D _v) const;
00045   double norm() const;
00047 
00049   V_3D normalized() const;
00050   double area(V_3D _v) const;
00051   double cos_angle(const V_3D& v) const;
00053   double angle(const V_3D& v)const;
00054 
00055   V_3D get_min_scalar(const V_3D& _v) const;
00056   V_3D get_max_scalar(const V_3D& _v) const;
00057   double get_max_of_coeff() const;
00058   double get_min_of_coeff() const;
00059 
00060   int equal(const V_3D& v,double epsilon) const;
00061 
00062 
00063   double tetrahedra_volume(const V_3D& p2,const V_3D& p3,const V_3D& p4) const;
00064   int get_barycenter_coordinates_tetrahedra(const V_3D& p1,const V_3D& p2,const V_3D& p3,const V_3D& p4,double *alpha,double *beta,double *gamma,double *delta) const;
00065   int is_inside_volume(const V_3D& p1,const V_3D& p2,const V_3D& p3,const V_3D& p4) const;
00066   double distance_to_oriented_plane(const V_3D& n,const V_3D& x0) const;
00067 
00070 
00071   double cos_angle_to_plane_with_normal(const V_3D& normal_to_plane) const;
00072 
00073 
00074   V_3D& operator=(const V_3D&);
00075   V_3D& operator+=(const V_3D&);
00076   V_3D& operator/=(const double&);
00077 
00078   bool operator>=(const V_3D& ) const;
00079   bool operator>(const V_3D &) const;
00080   bool operator<=(const V_3D &) const;
00081   bool operator<(const V_3D &) const;
00082 
00083   friend V_3D operator+(const V_3D& v1,const V_3D& v2);
00084   friend V_3D operator-(const V_3D& v1,const V_3D& v2);
00085   friend V_3D operator*(const V_3D& v1,const double& alpha);
00086   friend V_3D operator*(const double& alpha,const V_3D& v1);
00087   friend V_3D operator/(const V_3D& v1,const double& alpha);
00088   friend bool operator==(const V_3D& v1,const V_3D& v2);
00089   friend bool operator!=(const V_3D& v1,const V_3D& v2);
00090 
00091   double& operator[](int index);
00092   double operator[](int index) const;
00093 
00094   friend ostream& operator << (ostream& flux, V_3D _v);
00095 
00096  private:
00097 
00098   double V[3];
00099 };
00100 
00101 
00102 class less_V3D
00103 {
00104  public:
00105   bool operator ()(const V_3D& v0,const V_3D& v1) const
00106   {
00107 
00108     double epsilon=0.0001;
00109     if( fabs(v0[0]-v1[0])<epsilon && fabs(v0[1]-v1[1])<epsilon && fabs(v0[2]-v1[2])<epsilon )
00110       return false;
00111 
00112 
00113     if(v0[0]<v1[0])
00114       return true;
00115     else if ( !(v1[0]<v0[0]) && v0[1]<v1[1] )
00116       return true;
00117     else if ( !(v1[0]<v0[0]) && !(v1[1]<v0[1]) && v0[2]<v1[2] )
00118       return true;
00119 
00120     
00121     return false;
00122   }
00123 };
00124 
00125 #endif      /* !V_3D_H_ */

Generated on Mon Mar 30 16:55:54 2009 by  doxygen 1.5.6