MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_fast_marching2D.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// mg_fast_marching2D.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:56 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 #include "mg_fast_marching2D.h"
26 #include "mg_gestionnaire.h"
27 #include "fem_maillage.h"
28 #include "fem_triangle3.h"
29 #include "fem_solution.h"
30 #include "tpl_map_entite.h"
32 #include "ot_mathematique.h"
33 #include <math.h>
34 #include "pars_argument.h"
35 #include "parse.h"
36 #include "fem_maillage_outils.h"
37 #include "ot_boite_3d.h"
38 
39 
40 namespace MAGIC
41 {
42 #define INFINI 1e300
43 
44 
45 
47 {
48 }
49 
51 {
52 }
53 
54 
56 {
57 }
58 
59 
60 
61 
62 
63 
64 
65 void MG_FAST_MARCHING2D::init_coord(double x,double y,double z)
66 {
68 LISTE_FEM_NOEUD::iterator it;
69 BOITE_3D boite;
71 boite=no->get_boite_3D();
72 for (FEM_NOEUD* no=fem->get_premier_noeud(it);no!=NULL;no=fem->get_suivant_noeud(it))
73  {
74  BOITE_3D boitetmp=no->get_boite_3D();
75  boite=boite+boitetmp;
76  lst.ajouter(no);
77  }
78 
79 boite.change_grosseur(1.05);
80 oc.initialiser(&lst,1,boite.get_xmin(),boite.get_ymin(),boite.get_zmin(),boite.get_xmax(),boite.get_ymax(),boite.get_zmax());
81 LISTE_FEM_ELEMENT2::iterator it2;
82 for (FEM_ELEMENT2* ele=fem->get_premier_element2(it2);ele!=NULL;ele=fem->get_suivant_element2(it2))
83  oc.inserer(ele);
85 oc.rechercher(x,y,z,0.000000001,lst2);
86 int nb=lst2.get_nb();
88 bool trouve=false;
89 for (FEM_ELEMENT2* ele=lst2.get_premier(ite);ele!=NULL;ele=lst2.get_suivant(ite))
90  {
92  //int num=ot.estdansletriangle(ele,x,y,z);
93  int num=ot.projeteestdansletriangle(ele,x,y,z);
95  if (res)
96  {
97  trouve=true;
98  double xyz[3]={x,y,z};
99  for (int i=0;i<3;i++)
100  {
101  double *xyz1=ele->get_fem_noeud(i)->get_coord();
102  OT_VECTEUR_3D vec(xyz,xyz1);
103  ele->get_fem_noeud(i)->change_solution(vec.get_longueur());
104  }
105  }
106  }
107 if (!trouve)
108  {
109  char mess[500];
110  sprintf(mess," Le point %lf, %lf, %lf n'a pas pu être initialisé",x,y,z) ;
111  affiche(mess);
112  }
113 }
114 
115 
116 double MG_FAST_MARCHING2D::get_valeur(double x,double y,double z)
117 {
119 oc.rechercher(x,y,z,0.000000001,lst2);
121 for (FEM_ELEMENT2* ele=lst2.get_premier(ite);ele!=NULL;ele=lst2.get_suivant(ite))
122  {
124  //int num=ot.estdansletriangle(ele,x,y,z);
125  int num=ot.projeteestdansletriangle(ele,x,y,z);
127  if (res)
128  {
129  double xyz[3]={x,y,z};
130  double uvw[3];
131  ele->get_param_element_fini_2D(xyz,uvw);
132  double val=0;
133  for (int i=0;i<ele->get_nb_fem_noeud();i++)
134  val=val+ele->get_fonction_interpolation(i+1,uvw)*ele->get_fem_noeud(i)->get_solution();
135  return val;
136  }
137  }
138 char mess[500];
139 sprintf(mess," Le point %lf, %lf, %lf n'a pas pu être lu",x,y,z) ;
140 affiche(mess);
141 return 0.;
142 }
143 
144 
145 
146 
147 
148 void MG_FAST_MARCHING2D::propage(double vitesse)
149 {
150 if (nbnoeudinit==1)
151  {
152  int nb;
153  nb=last->get_lien_element2()->get_nb();
155  for (int i=0;i<nb;i++)
156  {
158  for (int j=0;j<ele->get_nb_fem_noeud();j++)
159  noproche.ajouter(ele->get_fem_noeud(j));
160  }
162  for (FEM_NOEUD* no=noproche.get_premier(it);no!=NULL;no=noproche.get_suivant(it))
163  if (no!=last)
164  {
165  OT_VECTEUR_3D vec(no->get_coord(),last->get_coord());
166  no->change_solution(vec.get_longueur()*vitesse);
167  }
168 
169  }
170 
171 
172 TPL_LISTE_ENTITE<FEM_ELEMENT2*> know,trial,far;
173 LISTE_FEM_ELEMENT2::iterator it;
174 for (FEM_ELEMENT2* ele=fem->get_premier_element2(it);ele!=NULL;ele=fem->get_suivant_element2(it))
175  {
176  int nb=ele->get_nb_fem_noeud();
177  int nbsol=0;
178  for (int i=0;i<nb;i++)
179  if (ele->get_fem_noeud(i)->get_solution()<INFINI)
180  {
181  nbsol++;
182  ele->get_fem_noeud(i)->change_numero(-1);
183  }
184  else ele->get_fem_noeud(i)->change_numero(1);
185  if ((nbsol==0)||(nbsol==1)) far.ajouter(ele);
186  if (nbsol==2) trial.ajouter(ele);
187  if (nbsol==3) know.ajouter(ele);
188  ele->change_numero(nbsol);
189  }
190 std::multimap<double,FEM_NOEUD*> trialnoeud;
191 std::map<FEM_NOEUD*,std::multimap<double,FEM_NOEUD*>::iterator> trialnoeud2;
192 
193 for (int i=0;i<trial.get_nb();i++)
194  {
195  FEM_ELEMENT2* ele=trial.get(i);
196  FEM_NOEUD* no;
197  double res;
198  int numno;
199  int erreur=resoudgradTtriangle(ele,vitesse,&no,&res);
200  no->change_solution(std::min(res,no->get_solution()));
201  std::map<FEM_NOEUD*,std::multimap<double,FEM_NOEUD*>::iterator>::iterator itf=trialnoeud2.find(no);
202  if (itf!=trialnoeud2.end())
203  {
204  trialnoeud.erase(itf->second);
205  trialnoeud2.erase(itf);
206  }
207  std::pair<double,FEM_NOEUD*> p(res,no);
208  std::multimap<double,FEM_NOEUD*>::iterator it=trialnoeud.insert(p);
209  std::pair<FEM_NOEUD*,std::multimap<double,FEM_NOEUD*>::iterator > p2(no,it);
210  trialnoeud2.insert(p2);
211  }
212 int compteur=0;
213 FEM_NOEUD* next=NULL;
214 while (trialnoeud.size()!=0)
215  {
216  compteur++;
217  if (compteur>10000000) return;
218  bool globalerreur=false;
219  if (next==NULL) next=trialnoeud.begin()->second;
220  FEM_NOEUD* no=next;
221  next=NULL;
222  int nbele=no->get_lien_element2()->get_nb();
223  no->change_numero(0);
224  std::vector<FEM_ELEMENT2*> lst;
225  /*if (no->get_numero_opt()==32)
226  next=NULL;
227  if (no->get_numero_opt()==26)
228  next=NULL;*/
229  for (int i=0;i<nbele;i++)
230  {
231  FEM_ELEMENT2* ele=no->get_lien_element2()->get(i);
232  int nbnum=ele->get_numero();
233  //int n1=ele->get_fem_noeud(0)->get_numero_opt();
234  //int n2=ele->get_fem_noeud(1)->get_numero_opt();
235  //int n3=ele->get_fem_noeud(2)->get_numero_opt();
236  nbnum++;
237  if (nbnum>3) nbnum=3;
238  if (nbnum==2)
239  {
240  FEM_NOEUD* nvno;
241  double res;
242  int numno;
243  int erreur=resoudgradTtriangle(ele,vitesse,&nvno,&res);
244  double T=std::min(res,nvno->get_solution());
245  nvno->change_solution(T);
246  std::map<FEM_NOEUD*,std::multimap<double,FEM_NOEUD*>::iterator>::iterator it=trialnoeud2.find(nvno);
247  if (it!=trialnoeud2.end())
248  {
249  trialnoeud.erase(it->second);
250  trialnoeud2.erase(it);
251  }
252  std::pair<double,FEM_NOEUD*> p(T,nvno);
253  std::multimap<double,FEM_NOEUD*>::iterator it2=trialnoeud.insert(p);
254  std::pair<FEM_NOEUD*,std::multimap<double,FEM_NOEUD*>::iterator > p2(nvno,it2);
255  trialnoeud2.insert(p2);
256  }
257  ele->change_numero(nbnum);
258  lst.push_back(ele);
259  }
260  if (globalerreur==false)
261  {
262  std::map<FEM_NOEUD*,std::multimap<double,FEM_NOEUD*>::iterator>::iterator it=trialnoeud2.find(no);
263  if (it!=trialnoeud2.end())
264  {
265  trialnoeud.erase(it->second);
266  trialnoeud2.erase(it);
267  }
268  }
269  }
270 finalise();
271 }
272 
273 
274 
275 
277 {
278 int erreur;
279 /*switch (versiongradTtriangle)
280  {
281  case VERSION_GRADT_TRI_SETHIAN:
282  erreur=resoudgradTtriangle_sethian(ele,v,noupdate,res);
283  break;
284  case VERSION_GRADT_TRI_PERSO:
285  erreur=resoudgradTtriangle_perso(ele,v,noupdate,res);
286  break;
287  } */
288 
289 FEM_NOEUD *noa,*nob,*noc;
290 int numc;
291 if (ele->get_fem_noeud(0)->get_numero()==1) {noc=ele->get_fem_noeud(0);numc=0;}
292 if (ele->get_fem_noeud(1)->get_numero()==1) {noc=ele->get_fem_noeud(1);numc=1;}
293 if (ele->get_fem_noeud(2)->get_numero()==1) {noc=ele->get_fem_noeud(2);numc=2;}
294 *noupdate=noc;
295 int nummin;
296 double solmin=1e300;
297 for (int i=0;i<3;i++)
298 if (i!=numc)
299  {
300  double sol=ele->get_fem_noeud(i)->get_solution();
301  if (sol<solmin) {solmin=sol;nummin=i;}
302  }
303 noa=ele->get_fem_noeud(nummin);
304 if ((nummin!=0) && (numc!=0)) nob=ele->get_fem_noeud(0);
305 if ((nummin!=1) && (numc!=1)) nob=ele->get_fem_noeud(1);
306 if ((nummin!=2) && (numc!=2)) nob=ele->get_fem_noeud(2);
307 double ax=noa->get_x();
308 double ay=noa->get_y();
309 double az=noa->get_z();
310 double bx=nob->get_x();
311 double by=nob->get_y();
312 double bz=nob->get_z();
313 double dx=noc->get_x();
314 double dy=noc->get_y();
315 double dz=noc->get_z();
316 double at=noa->get_solution();
317 double bt=nob->get_solution();
318 double alpha;
319 erreur=val2d(ax,ay,az,bx,by,bz,dx,dy,dz,at,bt,v,(*res),alpha);
320 return erreur;
321 
322 }
323 
324 /*
325 int MG_FAST_MARCHING::resoudgradTtriangle_sethian(FEM_ELEMENT2* ele,double v,FEM_NOEUD** noupdate,double *res)
326 {
327 FEM_NOEUD *noa,*nob,*noc;
328 int numc;
329 if (ele->get_fem_noeud(0)->get_numero()==1) {noc=ele->get_fem_noeud(0);numc=0;}
330 if (ele->get_fem_noeud(1)->get_numero()==1) {noc=ele->get_fem_noeud(1);numc=1;}
331 if (ele->get_fem_noeud(2)->get_numero()==1) {noc=ele->get_fem_noeud(2);numc=2;}
332 *noupdate=noc;
333 int nummin;
334 double solmin=1e300;
335 for (int i=0;i<3;i++)
336  if (i!=numc)
337  {
338  double sol=ele->get_fem_noeud(i)->get_solution();
339  if (sol<solmin) {solmin=sol;nummin=i;}
340  }
341 noa=ele->get_fem_noeud(nummin);
342 if ((nummin!=0) && (numc!=0)) nob=ele->get_fem_noeud(0);
343 if ((nummin!=1) && (numc!=1)) nob=ele->get_fem_noeud(1);
344 if ((nummin!=2) && (numc!=2)) nob=ele->get_fem_noeud(2);
345 OT_VECTEUR_3D veca(nob->get_coord(),noc->get_coord());
346 OT_VECTEUR_3D vecb(noa->get_coord(),noc->get_coord());
347 double a=veca.get_longueur();
348 double b=vecb.get_longueur();
349 OT_VECTEUR_3D normal=veca&vecb;
350 normal.norme();
351 double costeta=veca*vecb/a/b;
352 OT_VECTEUR_3D basex=(-vecb);
353 OT_VECTEUR_3D basey=normal&basex;
354 basex.norme();
355 basey.norme();
356 OT_MATRICE_3D base(basex,basey,normal);
357 OT_MATRICE_3D baseinverse=base.transpose();
358 OT_VECTEUR_3D ptb=(-veca);
359 OT_VECTEUR_3D baseb=baseinverse*ptb;
360 if (baseb.get_x()<0)
361  return 1;
362 double u=nob->get_solution()-noa->get_solution();
363 if (fabs(u)<1e-10)
364  {
365  double nume=a*b*v*sqrt(1-costeta*costeta);
366  double deno=a*a+b*b-2*a*b*costeta;
367  deno=sqrt(deno);
368  *res=noa->get_solution()+nume/deno;
369  return 0;
370  }
371 double aa=a*a+b*b-2.*a*b*costeta;
372 double bb=2*b*u*(a*costeta-b);
373 double cc=b*b*(u*u-v*v*a*a*(1.-costeta*costeta));
374 double delta=bb*bb-4.*aa*cc;
375 double t1=-bb+sqrt(delta);
376 double t2=-bb-sqrt(delta);
377 t1=t1/2./aa;
378 t2=t2/2./aa;
379 double t=t1;
380 if (t<u) t=t2;
381 double valide=b*(t-u)/t;
382 if (t<u)
383  valide=-100;
384 if ((valide>a*costeta) && (valide<a/costeta))
385  *res=std::min(noc->get_solution(),t+noa->get_solution());
386  else
387  {
388  *res=std::min(noc->get_solution(),b*v+noa->get_solution());
389  *res=std::min(*res,a*v+nob->get_solution());
390  }
391 return 0;
392 }
393 
394 
395 int MG_FAST_MARCHING::resoudgradTtriangle_perso(FEM_ELEMENT2* ele,double v,FEM_NOEUD** noupdate,double *res)
396 {
397 double j[9];
398 double J[9];int li,col;
399 double N[9]={0.,0.,0.,0.,0.,0.,0.,0.,0.};
400 double jN[9]={0.,0.,0.,0.,0.,0.,0.,0.,0.};
401 double T[3];
402 double gTcst[3]={0.,0.,0.};
403 double gT[3]={0.,0.,0.};
404 double uv[2]={0.25,0.25};
405 
406 
407 ele->get_inverse_jacob(j,uv);
408 
409 int numno;
410 for (int i=0;i<2;i++)
411  for (int k=0;k<3;k++)
412  N[i*3+k]=ele->get_fonction_derive_interpolation(k+1,i+1,uv);
413 for (int i=0;i<3;i++)
414  {
415  T[i]=ele->get_fem_noeud(i)->get_solution();
416  if (ele->get_fem_noeud(i)->get_numero()==1)
417  {
418  *noupdate=ele->get_fem_noeud(i);
419  numno=i;
420  }
421 
422  }
423 
424 
425 for (int i=0;i<3;i++)
426  for (int k=0;k<3;k++)
427  for (int l=0;l<3;l++)
428  jN[i*3+k]=jN[i*3+k]+j[i*3+l]*N[l*3+k];
429 for (int i=0;i<3;i++)
430  for (int j=0;j<3;j++)
431  {
432  if (numno==j) gT[i]=gT[i]+jN[i*3+j];
433  else gTcst[i]=gTcst[i]+jN[i*3+j]*T[j];
434  }
435 double a=gT[0]*gT[0]+gT[1]*gT[1]+gT[2]*gT[2];
436 double b=2.*(gTcst[0]*gT[0]+gTcst[1]*gT[1]+gTcst[2]*gT[2]);
437 double c=-v*v+gTcst[0]*gTcst[0]+gTcst[1]*gTcst[1]+gTcst[2]*gTcst[2];
438 double det=b*b-4.*a*c;
439 if (det<-1e-8)
440  return 2;
441 if (det<0)
442  det=0;
443 else
444  det=sqrt(det);
445 double sol1=(-b-det)/2./a;
446 double sol2=(-b+det)/2./a;
447 double sol=sol1;
448 if (sol2>sol1) sol=sol2;
449 
450 for (int i=0;i<3;i++)
451  if (numno!=i)
452  if (sol<ele->get_fem_noeud(i)->get_solution()*0.99)
453  return 1;
454 
455 *res=sol;
456 return 0;
457 } */
458 
459 
460 
461 };
TPL_MAP_ENTITE::get_premier
virtual X get_premier(ITERATEUR &it)
Definition: tpl_map_entite.h:112
FEM_SOLUTION
Definition: fem_solution.h:40
MAGIC::MG_FAST_MARCHING2D::~MG_FAST_MARCHING2D
virtual ~MG_FAST_MARCHING2D()
Definition: mg_fast_marching2D.cpp:55
FEM_ELEMENT_MAILLAGE::change_numero
virtual void change_numero(int num)
Definition: fem_element_maillage.cpp:95
gestionversion.h
MAGIC::MG_FAST_MARCHING2D::propage
virtual void propage(double vitesse=1.0)
Definition: mg_fast_marching2D.cpp:148
mg_fast_marching2D.h
MAGIC::MG_FAST_MARCHING2D::oc
TPL_OCTREE< FEM_ELEMENT2 *, FEM_NOEUD * > oc
Definition: mg_fast_marching2D.h:68
TPL_MAP_ENTITE
Definition: tpl_map_entite.h:35
INFINI
#define INFINI
Definition: mg_fast_marching2D.cpp:42
BOITE_3D::get_xmin
double get_xmin(void)
Definition: ot_boite_3d.cpp:104
fem_solution.h
mg_gestionnaire.h
fem_maillage.h
FEM_MAILLAGE::get_premier_noeud
FEM_NOEUD * get_premier_noeud(LISTE_FEM_NOEUD::iterator &it)
Definition: fem_maillage.cpp:174
OPERATEUR::compare_etat_triangle
static int compare_etat_triangle(int etat, int valeur)
Definition: ot_mathematique.cpp:1857
MAGIC_AFFICHE::affiche
virtual void affiche(char *mess)
Definition: magic_affiche.cpp:43
MAGIC::MG_FAST_MARCHING2D::resoudgradTtriangle
virtual int resoudgradTtriangle(FEM_ELEMENT2 *ele, double v, FEM_NOEUD **noupdate, double *res)
Definition: mg_fast_marching2D.cpp:276
MAGIC::MG_FAST_MARCHING2D::MG_FAST_MARCHING2D
MG_FAST_MARCHING2D(FEM_SOLUTION *solu, int numchamp)
Definition: mg_fast_marching2D.cpp:46
MAGIC::MG_FAST_MARCHING::sol
FEM_SOLUTION * sol
Definition: mg_fast_marching.h:63
FEM_ELEMENT_MAILLAGE::get_numero
virtual int get_numero(void)
Definition: fem_element_maillage.cpp:101
FEM_NOEUD::get_numero
int get_numero(void)
Definition: fem_noeud.cpp:328
MAGIC::MG_FAST_MARCHING::fem
FEM_MAILLAGE * fem
Definition: mg_fast_marching.h:82
FEM_ELEMENT2
Definition: fem_element2.h:34
parse.h
FEM_MAILLAGE::get_premier_element2
FEM_ELEMENT2 * get_premier_element2(LISTE_FEM_ELEMENT2::iterator &it)
Definition: fem_maillage.cpp:561
TPL_OCTREE::inserer
virtual void inserer(BOITE_3D &boite, A a, TPL_CELLULE_OCTREE< A, CONDITION > *cellule)
Definition: tpl_octree.h:897
BOITE_3D::get_zmax
double get_zmax(void)
Definition: ot_boite_3d.cpp:129
BOITE_3D::get_ymin
double get_ymin(void)
Definition: ot_boite_3d.cpp:114
FEM_NOEUD::get_y
virtual double get_y(double coef=0.)
Definition: fem_noeud.cpp:210
FEM_NOEUD::get_coord
virtual double * get_coord(void)
Definition: fem_noeud.cpp:254
MAGIC::MG_FAST_MARCHING::last
FEM_NOEUD * last
Definition: mg_fast_marching.h:85
MAGIC
Definition: mg_fast_marching.cpp:40
FEM_NOEUD::get_lien_element2
TPL_LISTE_ENTITE< class FEM_ELEMENT2 * > * get_lien_element2(void)
Definition: fem_noeud.cpp:406
FEM_ELEMENT2::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)=0
MAGIC::MG_FAST_MARCHING::val2d
virtual int val2d(double ax, double ay, double az, double bx, double by, double bz, double dx, double dy, double dz, double at, double bt, double v, double &dt, double &alpha)
Definition: mg_fast_marching.cpp:823
MAGIC::MG_FAST_MARCHING::nbnoeudinit
int nbnoeudinit
Definition: mg_fast_marching.h:84
FEM_NOEUD::get_solution
virtual double get_solution(int num=0)
Definition: fem_noeud.cpp:364
BOITE_3D::get_xmax
double get_xmax(void)
Definition: ot_boite_3d.cpp:109
FEM_NOEUD::change_numero
void change_numero(int num)
Definition: fem_noeud.cpp:333
TPL_MAP_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_map_entite.h:83
MAGIC::MG_FAST_MARCHING2D::init_coord
virtual void init_coord(double x, double y, double z)
Definition: mg_fast_marching2D.cpp:65
tpl_liste_unique_entite.h
TPL_OCTREE::rechercher
virtual void rechercher(BOITE_3D &boite, TPL_MAP_ENTITE< A > &liste_entite_trouve, TPL_CELLULE_OCTREE< A, CONDITION > *cellule)
Definition: tpl_octree.h:606
FEM_NOEUD::get_boite_3D
virtual BOITE_3D get_boite_3D(void)
Definition: fem_noeud.cpp:369
TPL_LISTE_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_liste_entite.h:38
tpl_map_entite.h
TPL_MAP_ENTITE::ITERATEUR
std::map< unsigned long, X, std::less< unsigned long > >::iterator ITERATEUR
Definition: tpl_map_entite.h:38
TPL_LISTE_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_liste_entite.h:67
FEM_MAILLAGE::get_suivant_element2
FEM_ELEMENT2 * get_suivant_element2(LISTE_FEM_ELEMENT2::iterator &it)
Definition: fem_maillage.cpp:569
TPL_LISTE_ENTITE::get
virtual X get(int num)
Definition: tpl_liste_entite.h:72
ot_mathematique.h
FEM_NOEUD::get_x
virtual double get_x(double coef=0.)
Definition: fem_noeud.cpp:205
BOITE_3D::get_ymax
double get_ymax(void)
Definition: ot_boite_3d.cpp:119
FEM_NOEUD
Definition: fem_noeud.h:35
MAGIC::MG_FAST_MARCHING2D::get_valeur
virtual double get_valeur(double x, double y, double z)
Definition: mg_fast_marching2D.cpp:116
OPERATEUR::INTERIEUR
@ INTERIEUR
Definition: ot_mathematique.h:435
OT_VECTEUR_3D
Definition: ot_mathematique.h:94
TPL_MAP_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_map_entite.h:55
BOITE_3D
Definition: ot_boite_3d.h:27
FEM_NOEUD::get_z
virtual double get_z(double coef=0.)
Definition: fem_noeud.cpp:215
FEM_MAILLAGE_OUTILS
Definition: fem_maillage_outils.h:56
MAGIC::MG_FAST_MARCHING::finalise
virtual void finalise(void)
Definition: mg_fast_marching.cpp:240
ot_boite_3d.h
FEM_ELEMENT2::get_fem_noeud
virtual class FEM_NOEUD * get_fem_noeud(int num)=0
FEM_NOEUD::change_solution
virtual void change_solution(double val, int num=0)
Definition: fem_noeud.cpp:358
BOITE_3D::get_zmin
double get_zmin(void)
Definition: ot_boite_3d.cpp:124
fem_triangle3.h
OT_VECTEUR_3D::get_longueur
virtual double get_longueur(void) const
Definition: ot_mathematique.cpp:483
FEM_MAILLAGE::get_suivant_noeud
FEM_NOEUD * get_suivant_noeud(LISTE_FEM_NOEUD::iterator &it)
Definition: fem_maillage.cpp:182
TPL_LISTE_ENTITE
Definition: tpl_liste_entite.h:32
MAGIC::MG_FAST_MARCHING
Definition: mg_fast_marching.h:44
MAGIC::MG_FAST_MARCHING::num
int num
Definition: mg_fast_marching.h:83
res
#define res(i, j)
pars_argument.h
BOITE_3D::change_grosseur
void change_grosseur(double f)
Definition: ot_boite_3d.cpp:176
TPL_MAP_ENTITE::get_suivant
virtual X get_suivant(ITERATEUR &it)
Definition: tpl_map_entite.h:120
TPL_OCTREE::initialiser
virtual void initialiser(TPL_LISTE_ENTITE< CONDITION > *lst_entite, int nombre, double xmin, double ymin, double zmin, double xmax, double ymax, double zmax)
Definition: tpl_octree.h:366
fem_maillage_outils.h
FEM_MAILLAGE_OUTILS::projeteestdansletriangle
int projeteestdansletriangle(class XFEM_ELEMENT2 *tri, double x, double y, double z)
Definition: fem_maillage_outils.cpp:118