ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/outil/src/ot_mathematique.h
Revision: 69
Committed: Thu Mar 27 13:20:26 2008 UTC (17 years, 1 month ago) by souaissa
Content type: text/plain
Original Path: magic/lib/outil/outil/src/ot_mathematique.h
File size: 12024 byte(s)
Log Message:
Mise à jour des classes de la vectorisation et des calsses: ot_mathematique,ot_tenseur,ot_doubleprecision dans outil

File Contents

# User Rev Content
1 souaissa 58 //------------------------------------------------------------
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 souaissa 69 #include "ot_doubleprecision.h"
37 souaissa 58 #include <iostream>
38     #include <vector>
39    
40     class DLLPORTOUTIL OT_VECTEUR_3D
41     {
42     public :
43     // construction
44     OT_VECTEUR_3D(double x,double y,double z);
45     OT_VECTEUR_3D(double *xyz);
46     OT_VECTEUR_3D(double *xyz1,double *xyz2);
47     OT_VECTEUR_3D(void);
48     OT_VECTEUR_3D(const OT_VECTEUR_3D& mdd);
49     OT_VECTEUR_3D(OT_VECTEUR_3D& mdd);
50     OT_VECTEUR_3D unite(int i);
51     // stream string output
52     friend std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_3D & __vec);
53    
54     // comparison
55     bool operator== (const OT_VECTEUR_3D& mdd) const;
56     bool operator!= (const OT_VECTEUR_3D& mdd) const;
57     bool operator< (const OT_VECTEUR_3D& mdd) const;
58     bool operator<= (const OT_VECTEUR_3D& mdd) const;
59     bool operator> (const OT_VECTEUR_3D& mdd) const;
60     bool operator>= (const OT_VECTEUR_3D& mdd) const;
61     int compare_valeur (const OT_VECTEUR_3D& mdd) const;
62    
63     // coordinate access
64     virtual double get_x(void) const ;
65     virtual double get_y(void) const ;
66     virtual double get_z(void) const ;
67     virtual void change_x(double x);
68     virtual void change_y(double y);
69     virtual void change_z(double z);
70     virtual double* get_xyz(void);
71    
72     operator const double* () const;
73     operator double* ();
74     double operator[] (int i) const;
75     double& operator[] (int i);
76     double operator() (int i) const;
77     double & operator() (int i);
78    
79     // arithmetic operations
80     friend OT_VECTEUR_3D operator / (const OT_VECTEUR_3D& mdd1, double a);
81     friend OT_VECTEUR_3D operator - (const OT_VECTEUR_3D& mdd1);
82     friend double operator*(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
83     friend OT_VECTEUR_3D operator&(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
84     friend OT_VECTEUR_3D operator*(const class OT_MATRICE_3D& mdd1,const OT_VECTEUR_3D& mdd2);
85     friend OT_VECTEUR_3D operator+(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
86     friend OT_VECTEUR_3D operator-(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
87     friend OT_VECTEUR_3D operator*(double mdd1,const OT_VECTEUR_3D& mdd2);
88    
89     // arithmetic updates
90     OT_VECTEUR_3D& operator+= (const OT_VECTEUR_3D& rkV);
91     OT_VECTEUR_3D& operator-= (const OT_VECTEUR_3D& rkV);
92     OT_VECTEUR_3D& operator*= (double fScalar);
93     OT_VECTEUR_3D& operator/= (double fScalar);
94    
95     // vector operations
96     virtual double get_longueur(void) const ;
97     virtual double get_longueur2(void) const ;
98     virtual void norme(void);
99     OT_VECTEUR_3D gram_shmidt(const OT_VECTEUR_3D& vint);
100     virtual double diff(void);
101    
102    
103     private:
104     double valeur[3];
105     };
106    
107     class DLLPORTOUTIL OT_MATRICE_3D
108     {
109     public:
110     OT_MATRICE_3D(OT_VECTEUR_3D& v1,OT_VECTEUR_3D& v2,OT_VECTEUR_3D& v3);
111     OT_MATRICE_3D(void){};
112     OT_MATRICE_3D(double* t);
113     OT_MATRICE_3D(const OT_MATRICE_3D& mdd);
114    
115     // stream string output
116     friend std::ostream & operator << ( std::ostream & __os, const OT_MATRICE_3D & __mat);
117    
118     // access to matrix elements
119     double operator() (int iLigne, int iCol) const;
120     double & operator() (int iLigne, int iCol);
121     double valeur(int iLigne, int iCol) const;
122     double & valeur(int iLigne, int iCol);
123     OT_VECTEUR_3D& get_vecteur1(void);
124     OT_VECTEUR_3D& get_vecteur2(void);
125     OT_VECTEUR_3D& get_vecteur3(void);
126     void change_vecteur1(OT_VECTEUR_3D v);
127     void change_vecteur2(OT_VECTEUR_3D v);
128     void change_vecteur3(OT_VECTEUR_3D v);
129     OT_VECTEUR_3D & operator [](int i);
130     // return inverse matrix
131     OT_MATRICE_3D inverse() const;
132     // assignements methods
133     void identite(void);
134     double get_determinant();
135     void transpose(OT_MATRICE_3D& res) const;
136     friend OT_MATRICE_3D operator+(const OT_MATRICE_3D& mdd1,const OT_MATRICE_3D& mdd2);
137    
138     private:
139     OT_VECTEUR_3D vec[3]; // attention ! vecteurs colonne
140     friend OT_VECTEUR_3D operator*(const OT_MATRICE_3D& mdd1,const OT_VECTEUR_3D& mdd2);
141     };
142    
143     DLLPORTOUTIL std::ostream & operator << ( std::ostream & __os, const OT_MATRICE_3D & __mat);
144     DLLPORTOUTIL std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_3D & __vec);
145     DLLPORTOUTIL OT_VECTEUR_3D operator / (const OT_VECTEUR_3D& mdd1, double a);
146     DLLPORTOUTIL OT_VECTEUR_3D operator - (const OT_VECTEUR_3D& mdd1);
147     DLLPORTOUTIL double operator*(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
148     DLLPORTOUTIL OT_VECTEUR_3D operator&(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
149     DLLPORTOUTIL OT_VECTEUR_3D operator*(const OT_MATRICE_3D& mdd1,const OT_VECTEUR_3D& mdd2);
150     DLLPORTOUTIL OT_VECTEUR_3D operator+(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
151     DLLPORTOUTIL OT_VECTEUR_3D operator-(const OT_VECTEUR_3D& mdd1,const OT_VECTEUR_3D& mdd2);
152     DLLPORTOUTIL OT_MATRICE_3D operator*(const OT_MATRICE_3D& mdd1,const OT_MATRICE_3D& mdd2);
153     DLLPORTOUTIL OT_MATRICE_3D operator+(const OT_MATRICE_3D& mdd1,const OT_MATRICE_3D& mdd2);
154     DLLPORTOUTIL OT_VECTEUR_3D operator*(double mdd1,const OT_VECTEUR_3D& mdd2);
155    
156    
157    
158     #define ot_vecteur_4d
159     #ifdef ot_vecteur_4d
160     class DLLPORTOUTIL OT_VECTEUR_4D
161     {
162     public :
163     //construction
164     OT_VECTEUR_4D(double x,double y,double z,double w);
165     OT_VECTEUR_4D(double *xyzw);
166     OT_VECTEUR_4D(void){};
167     OT_VECTEUR_4D(const OT_VECTEUR_4D& mdd);
168     OT_VECTEUR_4D & operator= (double);
169    
170     // stream string output
171     friend std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_4D & __vec);
172    
173     // comparison
174     bool operator== (const OT_VECTEUR_4D& mdd) const;
175     bool operator!= (const OT_VECTEUR_4D& mdd) const;
176     bool operator< (const OT_VECTEUR_4D& mdd) const;
177     bool operator<= (const OT_VECTEUR_4D& mdd) const;
178     bool operator> (const OT_VECTEUR_4D& mdd) const;
179     bool operator>= (const OT_VECTEUR_4D& mdd) const;
180     int compare_valeur (const OT_VECTEUR_4D& mdd) const;
181    
182     // coordinate access
183     virtual double get_x(void) const ;
184     virtual double get_y(void) const ;
185     virtual double get_z(void) const ;
186     virtual double get_w(void) const ;
187     virtual double & x(void);
188     virtual double & y(void);
189     virtual double & z(void);
190     virtual double & w(void);
191     virtual void change_x(double x);
192     virtual void change_y(double y);
193     virtual void change_z(double z);
194     virtual void change_w(double w);
195     virtual double* get_xyzw(void);
196     operator const double* () const;
197     operator double* ();
198     double operator[] (int i) const;
199     double& operator[] (int i);
200     double operator() (int i) const;
201     double & operator() (int i);
202    
203     // arithmetic operations
204     OT_VECTEUR_4D operator+ (const OT_VECTEUR_4D& rkV);
205     OT_VECTEUR_4D operator- (const OT_VECTEUR_4D& rkV);
206     double operator* (const OT_VECTEUR_4D & a);
207    
208     // arithmetic updates
209     OT_VECTEUR_4D& operator+= (const OT_VECTEUR_4D& rkV);
210     OT_VECTEUR_4D& operator-= (const OT_VECTEUR_4D& rkV);
211     OT_VECTEUR_4D& operator*= (double fScalar);
212     OT_VECTEUR_4D& operator/= (double fScalar);
213    
214     private:
215     double valeur[4];
216     };
217    
218     DLLPORTOUTIL OT_VECTEUR_4D operator* (const OT_VECTEUR_4D & rkV, const double a);
219     DLLPORTOUTIL OT_VECTEUR_4D operator* (const double a, const OT_VECTEUR_4D & rkV);
220     DLLPORTOUTIL OT_VECTEUR_4D operator/ (const OT_VECTEUR_4D & rkV, const double a);
221     DLLPORTOUTIL OT_VECTEUR_4D operator/ (const double a, const OT_VECTEUR_4D & rkV);
222     DLLPORTOUTIL std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_4D & __vec);
223     #endif // ot_vecteur_4d
224    
225    
226 souaissa 69
227     class DLLPORTOUTIL OT_VECTEUR_4DD
228     {
229     public :
230     //construction
231     OT_VECTEUR_4DD(double2 x,double2 y,double2 z,double2 w);
232     OT_VECTEUR_4DD(double2 *xyzw);
233     OT_VECTEUR_4DD(){};
234     OT_VECTEUR_4DD(const OT_VECTEUR_4DD& mdd);
235     //OT_VECTEUR_4DD & operator= (double2);
236     OT_VECTEUR_4DD & operator= (const OT_VECTEUR_4DD&);
237    
238     // stream string output
239     friend std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_4DD & __vec);
240    
241     // comparison
242     bool operator== (const OT_VECTEUR_4DD& mdd) const;
243     bool operator!= (const OT_VECTEUR_4DD& mdd) const;
244     bool operator< (const OT_VECTEUR_4DD& mdd) const;
245     bool operator<= (const OT_VECTEUR_4DD& mdd) const;
246     bool operator> (const OT_VECTEUR_4DD& mdd) const;
247     bool operator>= (const OT_VECTEUR_4DD& mdd) const;
248     int compare_valeur (const OT_VECTEUR_4DD& mdd) const;
249    
250     // coordinate access
251     virtual double2 get_x(void) const ;
252     virtual double2 get_y(void) const ;
253     virtual double2 get_z(void) const ;
254     virtual double2 get_w(void) const ;
255     virtual double2 & x(void);
256     virtual double2 & y(void);
257     virtual double2 & z(void);
258     virtual double2 & w(void);
259     virtual void change_x(double2 x);
260     virtual void change_y(double2 y);
261     virtual void change_z(double2 z);
262     virtual void change_w(double2 w);
263     virtual double2* get_xyzw(void);
264     operator const double2* () const;
265     operator double2* ();
266     double2 operator[] (int i) const;
267     double2& operator[] (int i);
268     double2 operator() (int i) const;
269     double2 & operator() (int i);
270    
271     // arithmetic operations
272     OT_VECTEUR_4DD operator+ (const OT_VECTEUR_4DD& rkV);
273     OT_VECTEUR_4DD operator- (const OT_VECTEUR_4DD& rkV);
274     double2 operator* (const OT_VECTEUR_4DD & a);
275    
276     // arithmetic updates
277     OT_VECTEUR_4DD& operator+= (const OT_VECTEUR_4DD& rkV);
278     OT_VECTEUR_4DD& operator-= (const OT_VECTEUR_4DD& rkV);
279     OT_VECTEUR_4DD& operator*= (double2 fScalar);
280     OT_VECTEUR_4DD& operator/= (double2 fScalar);
281    
282    
283     private:
284     double2 valeur[4];
285     };
286    
287     DLLPORTOUTIL OT_VECTEUR_4DD operator* (const OT_VECTEUR_4DD & rkV, const double2 a);
288     DLLPORTOUTIL OT_VECTEUR_4DD operator* (const double2 a, const OT_VECTEUR_4DD & rkV);
289     DLLPORTOUTIL OT_VECTEUR_4DD operator/ (const OT_VECTEUR_4DD & rkV, const double2 a);
290     DLLPORTOUTIL OT_VECTEUR_4DD operator/ (const double2 a, const OT_VECTEUR_4DD & rkV);
291     DLLPORTOUTIL std::ostream & operator << ( std::ostream & __os, const OT_VECTEUR_4DD & __vec);
292    
293    
294    
295    
296    
297 souaissa 58 class DLLPORTOUTIL OPERATEUR
298     {
299     public:
300     static int egal(double a,double b,double eps);
301     static double qualite_triangle(double* noeud1,double* noeud2,double* noeud3);
302     static double qualite_tetra(double* noeud1,double* noeud2,double* noeud3,double *noeud4);
303     static void doubleto2int(double val,int& val1,int& val2);
304     };
305    
306    
307     template <int N=4>
308     class DLLPORTOUTIL DOUBLEN
309     {
310     public:
311     DOUBLEN();
312     DOUBLEN(double *v);
313     DOUBLEN(DOUBLEN& mdd);
314     DOUBLEN(const DOUBLEN& mdd);
315     ~DOUBLEN();
316     double get_valeur(int num);
317     void change_valeur(int num,double val);
318     DOUBLEN<N> & operator=(DOUBLEN<N> & mdd);
319     DOUBLEN<N> & operator=(const DOUBLEN<N> & mdd);
320     private:
321     double tab[N];
322     };
323    
324    
325    
326    
327     #endif