ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/outil/src/ot_mathematique.h
Revision: 966
Committed: Thu Sep 6 16:46:34 2018 UTC (6 years, 8 months ago) by couturad
Content type: text/plain
File size: 18081 byte(s)
Log Message:
Ajout de l'histogramme a MAGIC_PLOT
Ajout d'une sortie OK ou FAIL (int) au MAILLEUR afin de gerer certaines exceptions
Ajout d'une phase RSA a la fin du generateur DCR

File Contents

# User Rev Content
1 francois 283 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuilli�re et Vincent FRANCOIS
5     // D�partement de G�nie M�canique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du d�partement
8     // de g�nie m�canique de l'Universit� du Qu�bec �
9     // Trois Rivi�res
10     // Les librairies ne peuvent �tre utilis�es sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // ot_mathematique.h
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 � 11H23
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23     #ifndef _OTMATHEMATIQUE_
24     #define _OTMATHEMATIQUE_
25    
26     #ifdef WINDOWS_VERSION
27     #ifdef BUILT_DLL_OUTIL
28     #define DLLPORTOUTIL __declspec(dllexport)
29     #else
30     #define DLLPORTOUTIL __declspec(dllimport)
31     #endif
32     #else
33     #define DLLPORTOUTIL
34     #endif
35    
36     #include "ot_doubleprecision.h"
37     #include <iostream>
38 couturad 919 #include <map>
39 francois 283 #include <vector>
40    
41    
42 couturad 919 class DLLPORTOUTIL OT_HISTOGRAMME
43     {
44     public:
45 couturad 926 OT_HISTOGRAMME(void);
46 couturad 919 OT_HISTOGRAMME(double largeur_colonne);
47 couturad 966 OT_HISTOGRAMME(OT_HISTOGRAMME &mdd,bool avec_data=true);
48 couturad 919 ~OT_HISTOGRAMME(void);
49 couturad 926 void fixe_largeur_colonne(double largeur_colonne);
50     double get_largeur_colonne(void);
51 couturad 919 void ajouter_valeur(double x,double val);
52     void ajouter_valeur(long i,double val);
53 couturad 926 double get_valeur(double x);
54     int get_premiere_valeur(std::map<long,double>::iterator &it,double &valeur);
55     int get_suivante_valeur(std::map<long,double>::iterator &it,double &valeur);
56     int get_premiere_valeur(std::map<long,double>::iterator &it,double &valeur,double &borne_min,double &borne_max);
57     int get_suivante_valeur(std::map<long,double>::iterator &it,double &valeur,double &borne_min,double &borne_max);
58     int get_premiere_valeur(std::map<long,double>::iterator &it,double &valeur,long &i);
59     int get_suivante_valeur(std::map<long,double>::iterator &it,double &valeur,long &i);
60 couturad 919 long get_nb_colonne(void);
61     double get_x_min(void);
62     double get_x_max(void);
63 couturad 926 OT_HISTOGRAMME& operator=(OT_HISTOGRAMME& mdd);
64 couturad 966 OT_HISTOGRAMME& operator=(const OT_HISTOGRAMME& mdd);
65 couturad 926 void enregistrer_bin(std::ofstream& ofstr);
66     void ouvrir_bin(std::ifstream& ifstr);
67     void exporter(std::ofstream& ofstrm);
68 couturad 919 protected:
69     bool m_init;
70     long m_i_min;
71     long m_i_max;
72     double m_largeur_colonne;
73 couturad 926 std::map<long,double,std::less<long>> m_map_colonne;
74 couturad 919 };
75    
76 couturad 906 class DLLPORTOUTIL OT_QUATERNION
77     {
78     public:
79     OT_QUATERNION(void);
80     OT_QUATERNION(double x,double y,double z,double w);
81     OT_QUATERNION(OT_QUATERNION &mdd);
82     double get_x(void);
83     void change_x(double x);
84     double get_y(void);
85     void change_y(double y);
86     double get_z(void);
87     void change_z(double z);
88     double get_w(void);
89     void change_w(double w);
90    
91     OT_QUATERNION& operator=(OT_QUATERNION& mdd);
92    
93     protected:
94     double valeur[4];
95     };
96 francois 283
97    
98    
99     class DLLPORTOUTIL OT_VECTEUR_3D
100     {
101     public :
102     // construction
103     OT_VECTEUR_3D(double x,double y,double z);
104     OT_VECTEUR_3D(double *xyz);
105     OT_VECTEUR_3D(double *xyz1,double *xyz2);
106     OT_VECTEUR_3D(void);
107     OT_VECTEUR_3D(const OT_VECTEUR_3D& mdd);
108     OT_VECTEUR_3D unite(int i);
109     // stream string output
110     friend std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_3D & __vec);
111    
112     // comparison
113     bool operator== (const OT_VECTEUR_3D& mdd) const;
114     bool operator!= (const OT_VECTEUR_3D& mdd) const;
115     bool operator< (const OT_VECTEUR_3D& mdd) const;
116     bool operator<= (const OT_VECTEUR_3D& mdd) const;
117     bool operator> (const OT_VECTEUR_3D& mdd) const;
118     bool operator>= (const OT_VECTEUR_3D& mdd) const;
119     int compare_valeur (const OT_VECTEUR_3D& mdd) const;
120    
121     // coordinate access
122     virtual double get_x(void) const ;
123     virtual double get_y(void) const ;
124     virtual double get_z(void) const ;
125     virtual void change_x(double x);
126     virtual void change_y(double y);
127     virtual void change_z(double z);
128     virtual double* get_xyz(void);
129    
130     operator const double* () const;
131     operator double* ();
132     double operator[] (int i) const;
133     double& operator[] (int i);
134     double operator() (int i) const;
135     double & operator() (int i);
136    
137     // arithmetic operations
138     friend OT_VECTEUR_3D operator / (const OT_VECTEUR_3D& mdd1, double a);
139     friend OT_VECTEUR_3D operator - (const OT_VECTEUR_3D& mdd1);
140     friend double operator*(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
141     friend OT_VECTEUR_3D operator&(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
142     friend OT_VECTEUR_3D operator*(const class OT_MATRICE_3D& mdd1,const OT_VECTEUR_3D& mdd2);
143     friend OT_VECTEUR_3D operator+(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
144     friend OT_VECTEUR_3D operator-(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
145     friend OT_VECTEUR_3D operator*(double mdd1,const OT_VECTEUR_3D& mdd2);
146    
147     // arithmetic updates
148     OT_VECTEUR_3D& operator+= (const OT_VECTEUR_3D& rkV);
149     OT_VECTEUR_3D& operator-= (const OT_VECTEUR_3D& rkV);
150     OT_VECTEUR_3D& operator*= (double fScalar);
151     OT_VECTEUR_3D& operator/= (double fScalar);
152    
153     // vector operations
154     virtual double get_longueur(void) const ;
155     virtual double get_longueur2(void) const ;
156     virtual void norme(void);
157     OT_VECTEUR_3D gram_shmidt(const OT_VECTEUR_3D& vint);
158     virtual double diff(void);
159    
160    
161     private:
162     double valeur[3];
163     };
164    
165     class DLLPORTOUTIL OT_MATRICE_3D
166     {
167     public:
168     OT_MATRICE_3D(OT_VECTEUR_3D& v1,OT_VECTEUR_3D& v2,OT_VECTEUR_3D& v3);
169     OT_MATRICE_3D(void);
170     OT_MATRICE_3D(double* t);
171     OT_MATRICE_3D(const OT_MATRICE_3D& mdd);
172    
173     // stream string output
174     friend std::ostream & operator << ( std::ostream & __os, const OT_MATRICE_3D & __mat);
175    
176     // access to matrix elements
177     double operator() (int iLigne, int iCol) const;
178     double & operator() (int iLigne, int iCol);
179     double valeur(int iLigne, int iCol) const;
180     double & valeur(int iLigne, int iCol);
181     OT_VECTEUR_3D& get_vecteur1(void);
182     OT_VECTEUR_3D& get_vecteur2(void);
183     OT_VECTEUR_3D& get_vecteur3(void);
184     void change_vecteur1(OT_VECTEUR_3D v);
185     void change_vecteur2(OT_VECTEUR_3D v);
186     void change_vecteur3(OT_VECTEUR_3D v);
187     OT_VECTEUR_3D & operator [](int i);
188     // return inverse matrix
189     OT_MATRICE_3D inverse() const;
190     // assignements methods
191     void identite(void);
192     double get_determinant();
193     void transpose(OT_MATRICE_3D& res) const;
194     OT_MATRICE_3D transpose() const;
195     friend OT_MATRICE_3D operator+(const OT_MATRICE_3D& mdd1,const OT_MATRICE_3D& mdd2);
196    
197     private:
198     OT_VECTEUR_3D vec[3]; // attention ! vecteurs colonne
199     friend OT_VECTEUR_3D operator*(const OT_MATRICE_3D& mdd1,const OT_VECTEUR_3D& mdd2);
200     };
201    
202     DLLPORTOUTIL std::ostream & operator << ( std::ostream & __os, const OT_MATRICE_3D & __mat);
203     DLLPORTOUTIL std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_3D & __vec);
204     DLLPORTOUTIL OT_VECTEUR_3D operator / (const OT_VECTEUR_3D& mdd1, double a);
205     DLLPORTOUTIL OT_VECTEUR_3D operator - (const OT_VECTEUR_3D& mdd1);
206     DLLPORTOUTIL double operator*(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
207     DLLPORTOUTIL OT_VECTEUR_3D operator&(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
208     DLLPORTOUTIL OT_VECTEUR_3D operator*(const OT_MATRICE_3D& mdd1,const OT_VECTEUR_3D& mdd2);
209     DLLPORTOUTIL OT_VECTEUR_3D operator+(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
210     DLLPORTOUTIL OT_VECTEUR_3D operator-(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
211     DLLPORTOUTIL OT_MATRICE_3D operator*(const OT_MATRICE_3D& mdd1,const OT_MATRICE_3D& mdd2);
212     DLLPORTOUTIL OT_MATRICE_3D operator+(const OT_MATRICE_3D& mdd1,const OT_MATRICE_3D& mdd2);
213     DLLPORTOUTIL OT_VECTEUR_3D operator*(double mdd1,const OT_VECTEUR_3D& mdd2);
214    
215    
216    
217     #define ot_vecteur_4d
218     #ifdef ot_vecteur_4d
219     class DLLPORTOUTIL OT_VECTEUR_4D
220     {
221     public :
222     //construction
223     OT_VECTEUR_4D(double x,double y,double z,double w);
224     OT_VECTEUR_4D(double *xyzw);
225     OT_VECTEUR_4D(void) {};
226     OT_VECTEUR_4D(const OT_VECTEUR_4D& mdd);
227     OT_VECTEUR_4D & operator= (double);
228    
229     // stream string output
230     friend std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_4D & __vec);
231    
232     // comparison
233     bool operator== (const OT_VECTEUR_4D& mdd) const;
234     bool operator!= (const OT_VECTEUR_4D& mdd) const;
235     bool operator< (const OT_VECTEUR_4D& mdd) const;
236     bool operator<= (const OT_VECTEUR_4D& mdd) const;
237     bool operator> (const OT_VECTEUR_4D& mdd) const;
238     bool operator>= (const OT_VECTEUR_4D& mdd) const;
239 francois 743 // int compare_valeur (const OT_VECTEUR_4D& mdd) const;
240 francois 283
241     // coordinate access
242     virtual double get_x(void) const ;
243     virtual double get_y(void) const ;
244     virtual double get_z(void) const ;
245     virtual double get_w(void) const ;
246     virtual double & x(void);
247     virtual double & y(void);
248     virtual double & z(void);
249     virtual double & w(void);
250     virtual void change_x(double x);
251     virtual void change_y(double y);
252     virtual void change_z(double z);
253     virtual void change_w(double w);
254     virtual double* get_xyzw(void);
255     operator const double* () const;
256     operator double* ();
257     double operator[] (int i) const;
258     double& operator[] (int i);
259     double operator() (int i) const;
260     double & operator() (int i);
261    
262     // arithmetic operations
263     OT_VECTEUR_4D operator+ (const OT_VECTEUR_4D& rkV);
264     OT_VECTEUR_4D operator- (const OT_VECTEUR_4D& rkV);
265     double operator* (const OT_VECTEUR_4D & a);
266    
267     // arithmetic updates
268     OT_VECTEUR_4D& operator+= (const OT_VECTEUR_4D& rkV);
269     OT_VECTEUR_4D& operator-= (const OT_VECTEUR_4D& rkV);
270     OT_VECTEUR_4D& operator*= (double fScalar);
271     OT_VECTEUR_4D& operator/= (double fScalar);
272    
273     private:
274     double valeur[4];
275     };
276    
277     DLLPORTOUTIL OT_VECTEUR_4D operator* (const OT_VECTEUR_4D & rkV, const double a);
278     DLLPORTOUTIL OT_VECTEUR_4D operator* (const double a, const OT_VECTEUR_4D & rkV);
279     DLLPORTOUTIL OT_VECTEUR_4D operator/ (const OT_VECTEUR_4D & rkV, const double a);
280     DLLPORTOUTIL OT_VECTEUR_4D operator/ (const double a, const OT_VECTEUR_4D & rkV);
281     DLLPORTOUTIL std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_4D & __vec);
282     #endif // ot_vecteur_4d
283    
284    
285    
286     class DLLPORTOUTIL OT_VECTEUR_4DD
287     {
288     public :
289     //construction
290     OT_VECTEUR_4DD(double2 x,double2 y,double2 z,double2 w);
291     OT_VECTEUR_4DD(double2 *xyzw);
292     OT_VECTEUR_4DD() {};
293     OT_VECTEUR_4DD(const OT_VECTEUR_4DD& mdd);
294     //OT_VECTEUR_4DD & operator= (double2);
295     OT_VECTEUR_4DD & operator= (const OT_VECTEUR_4DD&);
296    
297     // stream string output
298     friend std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_4DD & __vec);
299    
300     // comparison
301     bool operator== (const OT_VECTEUR_4DD& mdd) const;
302     bool operator!= (const OT_VECTEUR_4DD& mdd) const;
303     bool operator< (const OT_VECTEUR_4DD& mdd) const;
304     bool operator<= (const OT_VECTEUR_4DD& mdd) const;
305     bool operator> (const OT_VECTEUR_4DD& mdd) const;
306     bool operator>= (const OT_VECTEUR_4DD& mdd) const;
307     int compare_valeur (const OT_VECTEUR_4DD& mdd) const;
308    
309     // coordinate access
310     virtual double2 get_x(void) const ;
311     virtual double2 get_y(void) const ;
312     virtual double2 get_z(void) const ;
313     virtual double2 get_w(void) const ;
314     virtual double2 & x(void);
315     virtual double2 & y(void);
316     virtual double2 & z(void);
317     virtual double2 & w(void);
318     virtual void change_x(double2 x);
319     virtual void change_y(double2 y);
320     virtual void change_z(double2 z);
321     virtual void change_w(double2 w);
322     virtual double2* get_xyzw(void);
323     double2 norme();
324     OT_VECTEUR_4DD vecteur_norme() ;
325 francois 363 OT_VECTEUR_4DD vecteur_norme_3d() ;
326 francois 283 operator const double2* () const;
327     operator double2* ();
328     double2 operator[] (int i) const;
329     double2& operator[] (int i);
330     double2 operator() (int i) const;
331     double2 & operator() (int i);
332    
333     // arithmetic operations
334     OT_VECTEUR_4DD operator+ (const OT_VECTEUR_4DD& rkV);
335     OT_VECTEUR_4DD operator- (const OT_VECTEUR_4DD& rkV);
336     double2 operator* (const OT_VECTEUR_4DD & a);
337    
338     // arithmetic updates
339     OT_VECTEUR_4DD& operator+= (const OT_VECTEUR_4DD& rkV);
340     OT_VECTEUR_4DD& operator-= (const OT_VECTEUR_4DD& rkV);
341     OT_VECTEUR_4DD& operator*= (double2 fScalar);
342     OT_VECTEUR_4DD& operator/= (double2 fScalar);
343     OT_VECTEUR_4DD operator^(const OT_VECTEUR_4DD& v2);
344 francois 743 bool est_nul(void);
345     bool est_nul_3d(void);
346 francois 283
347    
348     private:
349     double2 valeur[4];
350     };
351    
352    
353    
354     class DLLPORTOUTIL OT_VECTEUR_3DD
355     {
356     public :
357     //construction
358     OT_VECTEUR_3DD(double2 x,double2 y,double2 z);
359 francois 550 OT_VECTEUR_3DD(double2 *xyzw);
360     OT_VECTEUR_3DD(double2 *xyz1,double2 *xyz2);
361 francois 283 OT_VECTEUR_3DD() {};
362     OT_VECTEUR_3DD(const OT_VECTEUR_3DD& mdd);
363     OT_VECTEUR_3DD & operator= (const OT_VECTEUR_3DD&);
364    
365     // stream string output
366     friend std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_3DD & __vec);
367    
368     // comparison
369     bool operator== (const OT_VECTEUR_3DD& mdd) const;
370     bool operator!= (const OT_VECTEUR_3DD& mdd) const;
371     bool operator< (const OT_VECTEUR_3DD& mdd) const;
372     bool operator<= (const OT_VECTEUR_3DD& mdd) const;
373     bool operator> (const OT_VECTEUR_3DD& mdd) const;
374     bool operator>= (const OT_VECTEUR_3DD& mdd) const;
375     int compare_valeur (const OT_VECTEUR_3DD& mdd) const;
376    
377     // coordinate access
378     virtual double2 get_x(void) const ;
379     virtual double2 get_y(void) const ;
380     virtual double2 get_z(void) const ;
381     virtual double2 & x(void);
382     virtual double2 & y(void);
383     virtual double2 & z(void);
384     virtual void change_x(double2 x);
385     virtual void change_y(double2 y);
386     virtual void change_z(double2 z);
387     virtual double2* get_xyz(void);
388     double2 norme();
389     OT_VECTEUR_3DD vecteur_norme() ;
390 francois 550 virtual double2 get_longueur(void) ;
391     virtual double2 get_longueur2(void) ;
392 francois 283 operator const double2* () const;
393     operator double2* ();
394     double2 operator[] (int i) const;
395     double2& operator[] (int i);
396     double2 operator() (int i) const;
397     double2 & operator() (int i);
398    
399     // arithmetic operations
400     OT_VECTEUR_3DD operator+ (const OT_VECTEUR_3DD& rkV);
401     OT_VECTEUR_3DD operator- (const OT_VECTEUR_3DD& rkV);
402     double2 operator* (const OT_VECTEUR_3DD & a);
403    
404     // arithmetic updates
405     OT_VECTEUR_3DD& operator+= (const OT_VECTEUR_3DD& rkV);
406     OT_VECTEUR_3DD& operator-= (const OT_VECTEUR_3DD& rkV);
407     OT_VECTEUR_3DD& operator*= (double2 fScalar);
408     OT_VECTEUR_3DD& operator/= (double2 fScalar);
409     OT_VECTEUR_3DD operator&(const OT_VECTEUR_3DD& v2);
410    
411    
412     private:
413     double2 valeur[3];
414     };
415    
416    
417    
418    
419    
420    
421     DLLPORTOUTIL OT_VECTEUR_4DD operator* (const OT_VECTEUR_4DD & rkV, const double2 a);
422     DLLPORTOUTIL OT_VECTEUR_4DD operator* (const double2 a, const OT_VECTEUR_4DD & rkV);
423     DLLPORTOUTIL OT_VECTEUR_4DD operator/ (const OT_VECTEUR_4DD & rkV, const double2 a);
424     DLLPORTOUTIL OT_VECTEUR_4DD operator/ (const double2 a, const OT_VECTEUR_4DD & rkV);
425     DLLPORTOUTIL std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_4DD & __vec);
426     DLLPORTOUTIL OT_VECTEUR_3DD operator* (const OT_VECTEUR_3DD & rkV, const double2 a);
427     DLLPORTOUTIL OT_VECTEUR_3DD operator* (const double2 a, const OT_VECTEUR_3DD & rkV);
428     DLLPORTOUTIL OT_VECTEUR_3DD operator/ (const OT_VECTEUR_3DD & rkV, const double2 a);
429     DLLPORTOUTIL OT_VECTEUR_3DD operator/ (const double2 a, const OT_VECTEUR_3DD & rkV);
430     DLLPORTOUTIL std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_4DD & __vec);
431    
432    
433    
434    
435    
436    
437     class DLLPORTOUTIL OPERATEUR
438     {
439     public:
440 francois 418 enum ETAT {EXTERIEUR=0,INTERIEUR=4,STRICTINTERIEUR=3,SUR_FACE=1,SUR_ARETE=5,FACE1=10,FACE2=11,FACE3=12,FACE4=13,ARETE1=20,ARETE2=21,ARETE3=22,ARETE4=23,ARETE5=24,ARETE6=25,SOMMET1=30,SOMMET2=31,SOMMET3=32,SOMMET4=33};
441    
442 francois 283 static int egal(double a,double b,double eps);
443 couturad 906 static int egal(double *xyz1,double *xyz2,double eps);
444 francois 283 static double qualite_triangle(double* noeud1,double* noeud2,double* noeud3);
445     static double qualite_tetra(double* noeud1,double* noeud2,double* noeud3,double *noeud4);
446     static void doubleto2int(double val,int& val1,int& val2);
447 francois 418 static int estdansletetra(double *xyz1,double *xyz2,double *xyz3,double *xyz4,double x,double y, double z);
448     static int estdansletriangle(double *xyz1,double *xyz2,double *xyz3,double x,double y, double z);
449     static int projeteestdansletriangle(double *xyz1,double *xyz2,double *xyz3,double x,double y, double z);
450    
451     static int compare_etat_tetra(int etat,int valeur);
452     static int compare_etat_triangle(int etat,int valeur);
453 couturad 926
454     static double taille_tetra(double* noeud1,double* noeud2,double* noeud3,double *noeud4);
455     static double taille_triangle(double* noeud1,double* noeud2,double* noeud3);
456 francois 283 };
457    
458    
459     template <int N=4>
460     class DLLPORTOUTIL DOUBLEN
461     {
462     public:
463     DOUBLEN();
464     DOUBLEN(double *v);
465     DOUBLEN(DOUBLEN& mdd);
466     DOUBLEN(const DOUBLEN& mdd);
467     ~DOUBLEN();
468     double get_valeur(int num);
469     void change_valeur(int num,double val);
470     DOUBLEN<N> & operator=(DOUBLEN<N> & mdd);
471     DOUBLEN<N> & operator=(const DOUBLEN<N> & mdd);
472     private:
473     double tab[N];
474     };
475    
476 couturad 951 struct lessOT_VECTEUR_4DD : std::binary_function<OT_VECTEUR_4DD, OT_VECTEUR_4DD, bool>
477 francois 283 {
478     bool operator() ( OT_VECTEUR_4DD v1, OT_VECTEUR_4DD v2)
479     {
480     if (v1[0]!=v2[0]) return v1[0]<v2[0] ;
481     if (v1[1]!=v2[1]) return v1[1]<v2[1] ;
482     if (v1[2]!=v2[2]) return v1[2]<v2[2] ;
483     if (v1[3]!=v2[3]) return v1[3]<v2[3] ;
484     return 0;
485    
486     }
487     ;
488     };
489    
490 couturad 951 struct lessOT_VECTEUR_3DD : std::binary_function<OT_VECTEUR_3DD, OT_VECTEUR_3DD, bool>
491 francois 283 {
492     bool operator() ( OT_VECTEUR_3DD v1, OT_VECTEUR_3DD v2)
493     {
494     if (v1[0]!=v2[0]) return v1[0]<v2[0] ;
495     if (v1[1]!=v2[1]) return v1[1]<v2[1] ;
496     if (v1[2]!=v2[2]) return v1[2]<v2[2] ;
497     return 0;
498    
499     }
500     ;
501     };
502    
503    
504     #endif