ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/outil/src/ot_boite_3d.cpp
Revision: 632
Committed: Thu Jan 15 18:40:00 2015 UTC (10 years, 5 months ago) by francois
Original Path: magic/lib/outil/src/ot_boite_3d.cpp
File size: 5189 byte(s)
Log Message:
Changement de l'espace de voisinage dans le mailleur 2D et 3D. On utilise un ntree (octree "anisotrope" qui ne se divise pas necessairement en 8). En 2D l'espace de voisinage est maintenant sur l'espace reelle au lieu d'être sur l'espace parametrique.
+Mise sous forme de parametres de certains choix stratégiques du mailleur

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_boite_3D.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 � 11H23
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26 francois 481 #include "ot_boite_3d.h"
27 francois 283 #include <math.h>
28 francois 632 #include <algorithm>
29 francois 283
30    
31    
32     BOITE_3D::BOITE_3D(double xmin,double ymin,double zmin,double xmax,double ymax,double zmax):x(xmin),y(ymin),z(zmin),dx(xmax-xmin),dy(ymax-ymin),dz(zmax-zmin)
33     {
34     if (dx<0.0000001) dx=0.00000001;
35     if (dy<0.0000001) dy=0.00000001;
36     if (dz<0.0000001) dz=0.00000001;
37     }
38    
39     BOITE_3D::BOITE_3D(void)
40     {
41     }
42    
43     void BOITE_3D::reinit(double xmin,double ymin,double zmin,double xmax,double ymax,double zmax)
44     {
45     x=xmin;
46     y=ymin;
47     z=zmin;
48     dx=xmax-xmin;
49     dy=ymax-ymin;
50     dz=zmax-zmin;
51     if (dx<0.0000001) dx=0.00000001;
52     if (dy<0.0000001) dy=0.00000001;
53     if (dz<0.0000001) dz=0.00000001;
54     }
55    
56     void BOITE_3D::reinit(BOITE_3D& boite)
57     {
58     x=boite.x;
59     y=boite.y;
60     z=boite.z;
61     dx=boite.dx;
62     dy=boite.dy;
63     dz=boite.dz;
64     }
65    
66     BOITE_3D::BOITE_3D(const BOITE_3D& mdd):x(mdd.x),y(mdd.y),z(mdd.z),dx(mdd.dx),dy(mdd.dy),dz(mdd.dz)
67     {
68     }
69    
70     BOITE_3D::BOITE_3D(BOITE_3D& mdd):x(mdd.x),y(mdd.y),z(mdd.z),dx(mdd.dx),dy(mdd.dy),dz(mdd.dz)
71     {
72     }
73    
74     BOITE_3D::~BOITE_3D()
75     {
76     }
77    
78     double BOITE_3D::get_xmin(void)
79     {
80     return x;
81     }
82    
83     double BOITE_3D::get_xmax(void)
84     {
85     return (x+dx);
86     }
87    
88     double BOITE_3D::get_ymin(void)
89     {
90     return y;
91     }
92    
93     double BOITE_3D::get_ymax(void)
94     {
95     return (y+dy);
96     }
97    
98     double BOITE_3D::get_zmin(void)
99     {
100     return z;
101     }
102    
103     double BOITE_3D::get_zmax(void)
104     {
105     return (z+dz);
106     }
107    
108 francois 632 /*BOITE_3D BOITE_3D::operator=(BOITE_3D& boite)
109 francois 283 {
110     x=boite.x;
111     y=boite.y;
112     z=boite.z;
113     dx=boite.dx;
114     dy=boite.dy;
115     dz=boite.dz;
116     return *this;
117 francois 632 }*/
118 francois 283 double BOITE_3D::get_rayon(void)
119     {
120     return (0.5*sqrt(dx*dx+dy*dy+dz*dz));
121     }
122    
123     void BOITE_3D::get_centre(double *coo)
124     {
125     coo[0]=x+dx*0.5;
126     coo[1]=y+dy*0.5;
127     coo[2]=z+dz*0.5;
128     }
129    
130     double BOITE_3D::get_xcentre(void)
131     {
132     return x+dx*0.5;
133     }
134    
135     double BOITE_3D::get_ycentre(void)
136     {
137     return y+dy*0.5;
138     }
139    
140     double BOITE_3D::get_zcentre(void)
141     {
142     return z+dz*0.5;
143     }
144    
145 francois 378 void BOITE_3D::change_grosseur(double f)
146     {
147     double centre[3];
148     get_centre(centre);
149     dx=dx*f;
150     dy=dy*f;
151     dz=dz*f;
152     reinit(centre[0]-dx/2.,centre[1]-dy/2.,centre[2]-dz/2.,centre[0]+dx/2.,centre[1]+dy/2.,centre[2]+dz/2.);
153     }
154 francois 283
155     int BOITE_3D::operator*(BOITE_3D& boite)
156     {
157     if ( x+dx>=boite.x)
158     if ( y+dy>=boite.y)
159     if ( z+dz>=boite.z)
160     if ( x<(boite.x+boite.dx))
161     if ( y<(boite.y+boite.dy))
162     if ( z<(boite.z+boite.dz))
163     return 1;
164     return 0;
165     }
166    
167 francois 632 BOITE_3D operator&(const BOITE_3D& boite1,const BOITE_3D& boite2)
168     {
169     double xmin1=boite1.x;
170     double ymin1=boite1.y;
171     double zmin1=boite1.z;
172     double xmin2=boite2.x;
173     double ymin2=boite2.y;
174     double zmin2=boite2.z;
175     double xmax1=boite1.x+boite1.dx;
176     double ymax1=boite1.y+boite1.dy;
177     double zmax1=boite1.z+boite1.dz;
178     double xmax2=boite2.x+boite2.dx;
179     double ymax2=boite2.y+boite2.dy;
180     double zmax2=boite2.z+boite2.dz;
181     double xmin=std::max(xmin1,xmin2);
182     double ymin=std::max(ymin1,ymin2);
183     double zmin=std::max(zmin1,zmin2);
184     double xmax=std::min(xmax1,xmax2);
185     double ymax=std::min(ymax1,ymax2);
186     double zmax=std::min(zmax1,zmax2);
187     BOITE_3D tmp(xmin,ymin,zmin,xmax,ymax,zmax);
188     return tmp;
189     }
190    
191    
192     BOITE_3D operator+(const BOITE_3D& boite1,const BOITE_3D& boite2)
193     {
194     double xmin1=boite1.x;
195     double ymin1=boite1.y;
196     double zmin1=boite1.z;
197     double xmin2=boite2.x;
198     double ymin2=boite2.y;
199     double zmin2=boite2.z;
200     double xmax1=boite1.x+boite1.dx;
201     double ymax1=boite1.y+boite1.dy;
202     double zmax1=boite1.z+boite1.dz;
203     double xmax2=boite2.x+boite2.dx;
204     double ymax2=boite2.y+boite2.dy;
205     double zmax2=boite2.z+boite2.dz;
206     double xmin=std::min(xmin1,xmin2);
207     double ymin=std::min(ymin1,ymin2);
208     double zmin=std::min(zmin1,zmin2);
209     double xmax=std::max(xmax1,xmax2);
210     double ymax=std::max(ymax1,ymax2);
211     double zmax=std::max(zmax1,zmax2);
212     BOITE_3D tmp(xmin,ymin,zmin,xmax,ymax,zmax);
213     return tmp;
214     }
215 francois 283 int BOITE_3D::contient(double xx,double yy,double zz)
216     {
217     if (xx>=x)
218     if (yy>=y)
219     if (zz>=z)
220     if (xx<=x+dx)
221     if (yy<=y+dy)
222     if (zz<=z+dz)
223     return 1;
224    
225    
226     return 0;
227     }
228    
229