MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
dly_tetra.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 //####// dly_tetra.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:55 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 
26 #include <stdlib.h>
27 #include "dly_noeud.h"
28 #include "dly_segment.h"
29 #include "dly_tetra.h"
30 #include "dly_triangle.h"
31 #include "ot_mathematique.h"
32 #include "fct_taille.h"
33 #include "robustpredicates.hxx"
34 #include <math.h>
35 #include <string.h>
36 
37 
38 
39 DLY_TETRA::DLY_TETRA(class DLY_NOEUD *no1,class DLY_NOEUD *no2,class DLY_NOEUD *no3,class DLY_NOEUD *no4):noeud1(no1),noeud2(no2),noeud3(no3),noeud4(no4),feuille(1),voisin1(NULL),voisin2(NULL),voisin3(NULL),voisin4(NULL),normal1(NULL),normal2(NULL),normal3(NULL),normal4(NULL),qualite(-100.)
40 {
41 }
42 
43 DLY_TETRA::DLY_TETRA(class DLY_NOEUD *no1,class DLY_NOEUD *no2,class DLY_NOEUD *no3,class DLY_NOEUD *no4,double qual):noeud1(no1),noeud2(no2),noeud3(no3),noeud4(no4),feuille(1),voisin1(NULL),voisin2(NULL),voisin3(NULL),voisin4(NULL),normal1(NULL),normal2(NULL),normal3(NULL),normal4(NULL),qualite(qual)
44 {
45 }
46 DLY_TETRA::DLY_TETRA(DLY_TETRA& mdd):noeud1(mdd.noeud1),noeud2(mdd.noeud2),noeud3(mdd.noeud3),noeud4(mdd.noeud4),feuille(mdd.feuille),voisin1(mdd.voisin1),voisin2(mdd.voisin2),voisin3(mdd.voisin3),voisin4(mdd.voisin4),qualite(mdd.qualite)
47 {
48  if (mdd.normal1==NULL) normal1=NULL;
49  else normal1=new double[3];
50  if (mdd.normal2==NULL) normal2=NULL;
51  else normal2=new double[3];
52  if (mdd.normal3==NULL) normal3=NULL;
53  else normal3=new double[3];
54  if (mdd.normal4==NULL) normal4=NULL;
55  else normal4=new double[3];
56  if (mdd.normal1!=NULL) memcpy(normal1,mdd.normal1,3*sizeof(double));
57  if (mdd.normal2!=NULL) memcpy(normal2,mdd.normal2,3*sizeof(double));
58  if (mdd.normal3!=NULL) memcpy(normal3,mdd.normal3,3*sizeof(double));
59  if (mdd.normal4!=NULL) memcpy(normal4,mdd.normal4,3*sizeof(double));
60 }
62 {
63  if (normal1!=NULL) delete [] normal1;
64  if (normal2!=NULL) delete [] normal2;
65  if (normal3!=NULL) delete [] normal3;
66  if (normal4!=NULL) delete [] normal4;
67 }
68 
70 {
71  return noeud1;
72 }
74 {
75  return noeud2;
76 }
78 {
79  return noeud3;
80 }
82 {
83  return noeud4;
84 }
85 
87 {
88  return feuille;
89 }
90 
92 {
93  feuille=num;
94 }
95 
97 {
98  return tri1;
99 }
101 {
102  return tri2;
103 }
105 {
106  return tri3;
107 }
109 {
110  return tri4;
111 }
113 {
114  return seg1;
115 }
117 {
118  return seg2;
119 }
121 {
122  return seg3;
123 }
125 {
126  return seg4;
127 }
129 {
130  return seg5;
131 }
133 {
134  return seg6;
135 }
137 {
138  tri1=tri;
139  tri1->insere_lien_tetra(this);
140 }
142 {
143  tri2=tri;
144  tri2->insere_lien_tetra(this);
145 }
147 {
148  tri3=tri;
149  tri3->insere_lien_tetra(this);
150 }
152 {
153  tri4=tri;
154  tri4->insere_lien_tetra(this);
155 }
157 {
158  seg1=seg;
159  seg1->insere_lien_tetra(this);
160 }
162 {
163  seg2=seg;
164  seg2->insere_lien_tetra(this);
165 }
167 {
168  seg3=seg;
169  seg3->insere_lien_tetra(this);
170 }
172 {
173  seg4=seg;
174  seg4->insere_lien_tetra(this);
175 }
177 {
178  seg5=seg;
179  seg5->insere_lien_tetra(this);
180 }
182 {
183  seg6=seg;
184  seg6->insere_lien_tetra(this);
185 }
186 
188 {
189  return voisin1;
190 }
192 {
193  return voisin2;
194 }
196 {
197  return voisin3;
198 }
200 {
201  return voisin4;
202 }
204 {
205  voisin1=tet;
206 }
208 {
209  voisin2=tet;
210 }
212 {
213  voisin3=tet;
214 }
216 {
217  voisin4=tet;
218 }
220 {
221  feuille=0;
222  fils.push_back(tet);
223 }
224 void DLY_TETRA::ajoute_fils(std::vector<DLY_TETRA*> &liste)
225 {
226  if (liste.size()==0) return;
227  feuille=0;
228  for (int i=0;i<liste.size();i++)
229  fils.push_back(liste[i]);
230 }
232 {
233  return fils.size();
234 }
236 {
237  return fils[i];
238 }
239 
240 int DLY_TETRA::point_dans_la_sphere(double x,double y,double z)
241 {
242  double xyz1[3],xyz2[3],xyz3[3],xyz4[3];
243  noeud1->get_coord(xyz1);
244  noeud2->get_coord(xyz2);
245  noeud3->get_coord(xyz3);
246  noeud4->get_coord(xyz4);
247  double xyz[3]={x,y,z};
248  double val=robustPredicates::insphere(xyz1,xyz2,xyz3,xyz4,xyz)*robustPredicates::orient3d(xyz1,xyz2,xyz3,xyz4);
249  return (val > 0) ? 1 : 0;
250 }
251 int DLY_TETRA::point_dans_le_tetra(double x,double y,double z)
252 {
253  double xyz1[3],xyz2[3],xyz3[3],xyz4[3];
254  noeud1->get_coord(xyz1);
255  noeud2->get_coord(xyz2);
256  noeud3->get_coord(xyz3);
257  noeud4->get_coord(xyz4);
258  OT_VECTEUR_3D v1(xyz2[0]-xyz1[0],xyz2[1]-xyz1[1],xyz2[2]-xyz1[2]);
259  OT_VECTEUR_3D v2(xyz3[0]-xyz1[0],xyz3[1]-xyz1[1],xyz3[2]-xyz1[2]);
260  OT_VECTEUR_3D v3(xyz4[0]-xyz1[0],xyz4[1]-xyz1[1],xyz4[2]-xyz1[2]);
261  OT_VECTEUR_3D v4(x-xyz1[0],y-xyz1[1],z-xyz1[2]);
262  OT_MATRICE_3D mat(v1,v2,v3);
263  OT_MATRICE_3D mat1(v4,v2,v3);
264  OT_MATRICE_3D mat2(v1,v4,v3);
265  OT_MATRICE_3D mat3(v1,v2,v4);
266  double det=mat.get_determinant();
267  double xsi=mat1.get_determinant()/det;
268  double eta=mat2.get_determinant()/det;
269  double dseta=mat3.get_determinant()/det;
270  int reponse1=1;
271  double eps=0.0000001;
272  if (xsi<-eps) reponse1=0;
273  if (eta<-eps) reponse1=0;
274  if (dseta<-eps) reponse1=0;
275  if (xsi+eta+dseta>1.+eps) reponse1=0;
276  return reponse1;
277 }
279 {
280  return volume;
281 }
282 double DLY_TETRA::calcul_volume(FCT_TAILLE *metrique,int conserve)
283 {
284  double vol;
285  double xyz1[3],xyz2[3],xyz3[3],xyz4[3];
286  noeud1->get_coord(xyz1);
287  noeud2->get_coord(xyz2);
288  noeud3->get_coord(xyz3);
289  noeud4->get_coord(xyz4);
290  OT_VECTEUR_3D vec1(xyz1,xyz2);
291  OT_VECTEUR_3D vec2(xyz1,xyz3);
292  OT_VECTEUR_3D vec3(xyz1,xyz4);
293  double facteur=(vec1&vec2)*vec3;
294  if (metrique==NULL)
295  {
296  vol=facteur/6.;
297  if (conserve) volume=vol;
298  return vol;
299  }
300  static int r=15;
301  static double gaussx[15],gaussy[15],gaussz[15],wi[15];
302  static int first=0;
303  if (first==0)
304  {
305  first=1;
306  double a=0.25;
307  double b2=0.319793627;
308  double b1=0.091971078;
309  double c1=0.724086765;
310  double c2=0.040619116;
311  double d=0.056350832;
312  double e=0.443649167;
313  double w0=0.019753086;
314  double w1=0.011989513;
315  double w2=0.011511367;
316  double w3=0.008818342;
317  gaussx[0]=a;
318  gaussy[0]=a;
319  gaussz[0]=a;
320  wi[0]=w0;
321  gaussx[1]=b1;
322  gaussy[1]=b1;
323  gaussz[1]=b1;
324  wi[1]=w1;
325  gaussx[2]=b1;
326  gaussy[2]=b1;
327  gaussz[2]=c1;
328  wi[2]=w1;
329  gaussx[3]=b1;
330  gaussy[3]=c1;
331  gaussz[3]=b1;
332  wi[3]=w1;
333  gaussx[4]=c1;
334  gaussy[4]=b1;
335  gaussz[4]=b1;
336  wi[4]=w1;
337  gaussx[5]=b2;
338  gaussy[5]=b2;
339  gaussz[5]=b2;
340  wi[5]=w2;
341  gaussx[6]=b2;
342  gaussy[6]=b2;
343  gaussz[6]=c2;
344  wi[6]=w2;
345  gaussx[7]=b2;
346  gaussy[7]=c2;
347  gaussz[7]=b2;
348  wi[7]=w2;
349  gaussx[8]=c2;
350  gaussy[8]=b2;
351  gaussz[8]=b2;
352  wi[8]=w2;
353  gaussx[9]=d;
354  gaussy[9]=d;
355  gaussz[9]=e;
356  wi[9]=w3;
357  gaussx[10]=d;
358  gaussy[10]=e;
359  gaussz[10]=d;
360  wi[10]=w3;
361  gaussx[11]=e;
362  gaussy[11]=d;
363  gaussz[11]=d;
364  wi[11]=w3;
365  gaussx[12]=d;
366  gaussy[12]=e;
367  gaussz[12]=e;
368  wi[12]=w3;
369  gaussx[13]=e;
370  gaussy[13]=d;
371  gaussz[13]=e;
372  wi[13]=w3;
373  gaussx[14]=e;
374  gaussy[14]=e;
375  gaussz[14]=d;
376  wi[14]=w3;
377  }
378  vol=0.;
379  for (int i=0;i<r;i++)
380  {
381  double xyz[3];
382  xyz[0]=(1-gaussx[i]-gaussy[i]-gaussz[i])*xyz1[0]+gaussx[i]*xyz2[0]+gaussy[i]*xyz3[0]+gaussz[i]*xyz4[0];
383  xyz[1]=(1-gaussx[i]-gaussy[i]-gaussz[i])*xyz1[1]+gaussx[i]*xyz2[1]+gaussy[i]*xyz3[1]+gaussz[i]*xyz4[1];
384  xyz[2]=(1-gaussx[i]-gaussy[i]-gaussz[i])*xyz1[2]+gaussx[i]*xyz2[2]+gaussy[i]*xyz3[2]+gaussz[i]*xyz4[2];
385  double tenseur[9];
386  metrique->evaluer(xyz,tenseur);
387  OT_VECTEUR_3D vec1(tenseur[0],tenseur[3],tenseur[6]);
388  OT_VECTEUR_3D vec2(tenseur[1],tenseur[4],tenseur[7]);
389  OT_VECTEUR_3D vec3(tenseur[2],tenseur[5],tenseur[8]);
390  OT_MATRICE_3D mat(vec1,vec2,vec3);
391  vol=vol+sqrt(mat.get_determinant())*wi[i]*facteur;
392  }
393  if (conserve) volume=vol;
394  return vol;
395 }
396 
397 void DLY_TETRA::get_normal1(double *nor)
398 {
399  if (normal1==NULL)
400  {
401  normal1=new double[3];
402  double xyz1[3],xyz2[3],xyz3[3];
403  noeud1->get_coord(xyz1);
404  noeud2->get_coord(xyz2);
405  noeud3->get_coord(xyz3);
406  OT_VECTEUR_3D vec1(xyz1,xyz3);
407  OT_VECTEUR_3D vec2(xyz1,xyz2);
408  OT_VECTEUR_3D n=vec1&vec2;
409  n.norme();
410  normal1[0]=n.get_x();
411  normal1[1]=n.get_y();
412  normal1[2]=n.get_z();
413  }
414  nor[0]=normal1[0];
415  nor[1]=normal1[1];
416  nor[2]=normal1[2];
417 }
418 void DLY_TETRA::get_normal2(double *nor)
419 {
420  if (normal2==NULL)
421  {
422  normal2=new double[3];
423  double xyz1[3],xyz2[3],xyz4[3];
424  noeud1->get_coord(xyz1);
425  noeud2->get_coord(xyz2);
426  noeud4->get_coord(xyz4);
427  OT_VECTEUR_3D vec1(xyz1,xyz2);
428  OT_VECTEUR_3D vec2(xyz1,xyz4);
429  OT_VECTEUR_3D n=vec1&vec2;
430  n.norme();
431  normal2[0]=n.get_x();
432  normal2[1]=n.get_y();
433  normal2[2]=n.get_z();
434  }
435  nor[0]=normal2[0];
436  nor[1]=normal2[1];
437  nor[2]=normal2[2];
438 }
439 void DLY_TETRA::get_normal3(double *nor)
440 {
441  if (normal3==NULL)
442  {
443  normal3=new double[3];
444  double xyz1[3],xyz3[3],xyz4[3];
445  noeud1->get_coord(xyz1);
446  noeud3->get_coord(xyz3);
447  noeud4->get_coord(xyz4);
448  OT_VECTEUR_3D vec1(xyz1,xyz4);
449  OT_VECTEUR_3D vec2(xyz1,xyz3);
450  OT_VECTEUR_3D n=vec1&vec2;
451  n.norme();
452  normal3[0]=n.get_x();
453  normal3[1]=n.get_y();
454  normal3[2]=n.get_z();
455  }
456  nor[0]=normal3[0];
457  nor[1]=normal3[1];
458  nor[2]=normal3[2];
459 }
460 void DLY_TETRA::get_normal4(double *nor)
461 {
462  if (normal4==NULL)
463  {
464  normal4=new double[4];
465  double xyz2[3],xyz3[3],xyz4[3];
466  noeud2->get_coord(xyz2);
467  noeud3->get_coord(xyz3);
468  noeud4->get_coord(xyz4);
469  OT_VECTEUR_3D vec1(xyz2,xyz3);
470  OT_VECTEUR_3D vec2(xyz2,xyz4);
471  OT_VECTEUR_3D n=vec1&vec2;
472  n.norme();
473  normal4[0]=n.get_x();
474  normal4[1]=n.get_y();
475  normal4[2]=n.get_z();
476  }
477  nor[0]=normal4[0];
478  nor[1]=normal4[1];
479  nor[2]=normal4[2];
480 }
482 {
483 if (qualite<-1.)
484  {
485  double xyz1[3],xyz2[3],xyz3[3],xyz4[3];
486  noeud1->get_coord(xyz1);
487  noeud2->get_coord(xyz2);
488  noeud3->get_coord(xyz3);
489  noeud4->get_coord(xyz4);
490  qualite=OPERATEUR::qualite_tetra(xyz1,xyz2,xyz3,xyz4);
491  }
492 return qualite;
493 }
494 
496 {
497 return get_volume();
498 }
499 
500 void DLY_TETRA::decoupe_noeud(std::vector<double> &lstpt) // a adapter pour taille variable
501 {
502  double xyz1[3],xyz2[3],xyz3[3],xyz4[3],x,y,z;
503  noeud1->get_coord(xyz1);
504  noeud2->get_coord(xyz2);
505  noeud3->get_coord(xyz3);
506  noeud4->get_coord(xyz4);
507  double maxlon;
508  OT_VECTEUR_3D vec1(xyz1,xyz2);
509  double l1=vec1.get_longueur();
510  maxlon=l1;
511  OT_VECTEUR_3D vec2(xyz1,xyz3);
512  double l2=vec2.get_longueur();
513  if (l2>maxlon) maxlon=l2;
514  OT_VECTEUR_3D vec3(xyz1,xyz4);
515  double l3=vec1.get_longueur();
516  if (l3>maxlon) maxlon=l3;
517  OT_VECTEUR_3D vec4(xyz2,xyz3);
518  double l4=vec1.get_longueur();
519  if (l4>maxlon) maxlon=l4;
520  OT_VECTEUR_3D vec5(xyz2,xyz4);
521  double l5=vec1.get_longueur();
522  if (l5>maxlon) maxlon=l5;
523  OT_VECTEUR_3D vec6(xyz3,xyz4);
524  double l6=vec1.get_longueur();
525  if (l6>maxlon) maxlon=l6;
526  {
527  x=0.5*(xyz1[0]+xyz2[0]);
528  y=0.5*(xyz1[1]+xyz2[1]);
529  z=0.5*(xyz1[2]+xyz2[2]);
530  }
531  lstpt.push_back(x);
532  lstpt.push_back(y);
533  lstpt.push_back(z);
534  {
535  x=0.5*(xyz1[0]+xyz3[0]);
536  y=0.5*(xyz1[1]+xyz3[1]);
537  z=0.5*(xyz1[2]+xyz3[2]);
538  }
539  lstpt.push_back(x);
540  lstpt.push_back(y);
541  lstpt.push_back(z);
542  {
543  x=0.5*(xyz1[0]+xyz4[0]);
544  y=0.5*(xyz1[1]+xyz4[1]);
545  z=0.5*(xyz1[2]+xyz4[2]);
546  }
547  lstpt.push_back(x);
548  lstpt.push_back(y);
549  lstpt.push_back(z);
550  {
551  x=0.5*(xyz2[0]+xyz3[0]);
552  y=0.5*(xyz2[1]+xyz3[1]);
553  z=0.5*(xyz2[2]+xyz3[2]);
554  }
555  lstpt.push_back(x);
556  lstpt.push_back(y);
557  lstpt.push_back(z);
558  {
559  x=0.5*(xyz2[0]+xyz4[0]);
560  y=0.5*(xyz2[1]+xyz4[1]);
561  z=0.5*(xyz2[2]+xyz4[2]);
562  }
563  lstpt.push_back(x);
564  lstpt.push_back(y);
565  lstpt.push_back(z);
566  {
567  x=0.5*(xyz3[0]+xyz4[0]);
568  y=0.5*(xyz3[1]+xyz4[1]);
569  z=0.5*(xyz3[2]+xyz4[2]);
570  }
571  lstpt.push_back(x);
572  lstpt.push_back(y);
573  lstpt.push_back(z);
574 }
DLY_TETRA::seg1
class DLY_SEGMENT * seg1
Definition: dly_tetra.h:102
OT_MATRICE_3D::get_determinant
double get_determinant()
Definition: ot_mathematique.cpp:735
dly_tetra.h
fct_taille.h
gestionversion.h
DLY_TRIANGLE::insere_lien_tetra
void insere_lien_tetra(class DLY_TETRA *tet)
Definition: dly_triangle.cpp:58
DLY_TETRA::point_dans_la_sphere
int point_dans_la_sphere(double x, double y, double z)
Definition: dly_tetra.cpp:240
DLY_NOEUD
Definition: dly_noeud.h:30
robustpredicates.hxx
DLY_TETRA::get_segment1
class DLY_SEGMENT * get_segment1(void)
Definition: dly_tetra.cpp:112
DLY_TETRA::get_triangle4
DLY_TRIANGLE * get_triangle4(void)
Definition: dly_tetra.cpp:108
DLY_TETRA::get_triangle1
class DLY_TRIANGLE * get_triangle1(void)
Definition: dly_tetra.cpp:96
mat2
#define mat2(i, j)
a
#define a(i, j)
DLY_TETRA::get_critere_subdivision
double get_critere_subdivision(void)
Definition: dly_tetra.cpp:495
DLY_TETRA::change_triangle4
void change_triangle4(DLY_TRIANGLE *tri)
Definition: dly_tetra.cpp:151
DLY_TETRA::change_segment3
void change_segment3(DLY_SEGMENT *seg)
Definition: dly_tetra.cpp:166
mat1
#define mat1(i, j)
DLY_TETRA::change_segment5
void change_segment5(DLY_SEGMENT *seg)
Definition: dly_tetra.cpp:176
DLY_TETRA::noeud2
DLY_NOEUD * noeud2
Definition: dly_tetra.h:95
DLY_TETRA::decoupe_noeud
void decoupe_noeud(std::vector< double > &lstpt)
Definition: dly_tetra.cpp:500
DLY_TETRA::ajoute_fils
void ajoute_fils(std::vector< DLY_TETRA * > &liste)
Definition: dly_tetra.cpp:224
DLY_TETRA::DLY_TETRA
DLY_TETRA(class DLY_NOEUD *no1, class DLY_NOEUD *no2, class DLY_NOEUD *no3, class DLY_NOEUD *no4)
Definition: dly_tetra.cpp:39
FCT_TAILLE
Definition: fct_taille.h:30
DLY_TETRA::voisin4
DLY_TETRA * voisin4
Definition: dly_tetra.h:111
OT_VECTEUR_3D::get_x
virtual double get_x(void) const
Definition: ot_mathematique.cpp:417
DLY_TETRA::get_voisin1
DLY_TETRA * get_voisin1(void)
Definition: dly_tetra.cpp:187
DLY_TETRA::get_segment2
DLY_SEGMENT * get_segment2(void)
Definition: dly_tetra.cpp:116
DLY_SEGMENT::insere_lien_tetra
void insere_lien_tetra(class DLY_TETRA *tet)
Definition: dly_segment.cpp:55
DLY_TETRA::get_triangle2
DLY_TRIANGLE * get_triangle2(void)
Definition: dly_tetra.cpp:100
DLY_TETRA::get_normal1
void get_normal1(double *nor)
Definition: dly_tetra.cpp:397
DLY_TETRA::change_segment2
void change_segment2(DLY_SEGMENT *seg)
Definition: dly_tetra.cpp:161
DLY_TETRA::seg2
class DLY_SEGMENT * seg2
Definition: dly_tetra.h:103
DLY_TETRA::tri1
class DLY_TRIANGLE * tri1
Definition: dly_tetra.h:98
DLY_TETRA::feuille
int feuille
Definition: dly_tetra.h:112
DLY_TETRA::normal2
double * normal2
Definition: dly_tetra.h:116
DLY_TETRA::get_qualite
double get_qualite(void)
Definition: dly_tetra.cpp:481
DLY_TETRA::get_segment3
DLY_SEGMENT * get_segment3(void)
Definition: dly_tetra.cpp:120
DLY_SEGMENT
Definition: dly_segment.h:30
DLY_NOEUD::get_coord
virtual void get_coord(double *xyztmp)
Definition: dly_noeud.cpp:85
DLY_TETRA::volume
double volume
Definition: dly_tetra.h:114
DLY_TETRA::get_normal4
void get_normal4(double *nor)
Definition: dly_tetra.cpp:460
DLY_TETRA::change_segment4
void change_segment4(DLY_SEGMENT *seg)
Definition: dly_tetra.cpp:171
DLY_TETRA::voisin2
DLY_TETRA * voisin2
Definition: dly_tetra.h:109
DLY_TETRA::seg4
class DLY_SEGMENT * seg4
Definition: dly_tetra.h:105
DLY_TETRA::get_normal2
void get_normal2(double *nor)
Definition: dly_tetra.cpp:418
DLY_TETRA::get_normal3
void get_normal3(double *nor)
Definition: dly_tetra.cpp:439
OT_MATRICE_3D
Definition: ot_mathematique.h:160
dly_triangle.h
DLY_TETRA::noeud1
DLY_NOEUD * noeud1
Definition: dly_tetra.h:94
robustPredicates::insphere
REAL insphere(REAL *pa, REAL *pb, REAL *pc, REAL *pd, REAL *pe)
Definition: robustpredicates.cc:4167
DLY_TETRA::change_voisin2
void change_voisin2(DLY_TETRA *tet)
Definition: dly_tetra.cpp:207
DLY_TETRA::normal1
double * normal1
Definition: dly_tetra.h:116
DLY_TETRA::change_segment6
void change_segment6(DLY_SEGMENT *seg)
Definition: dly_tetra.cpp:181
DLY_TETRA::tri2
class DLY_TRIANGLE * tri2
Definition: dly_tetra.h:99
DLY_TRIANGLE
Definition: dly_triangle.h:30
DLY_TETRA::get_noeud3
DLY_NOEUD * get_noeud3(void)
Definition: dly_tetra.cpp:77
DLY_TETRA::change_triangle1
void change_triangle1(DLY_TRIANGLE *tri)
Definition: dly_tetra.cpp:136
DLY_TETRA::get_voisin2
DLY_TETRA * get_voisin2(void)
Definition: dly_tetra.cpp:191
DLY_TETRA::change_voisin1
void change_voisin1(DLY_TETRA *tet)
Definition: dly_tetra.cpp:203
OT_VECTEUR_3D::norme
virtual void norme(void)
Definition: ot_mathematique.cpp:494
DLY_TETRA::noeud3
DLY_NOEUD * noeud3
Definition: dly_tetra.h:96
DLY_TETRA::get_feuille
int get_feuille(void)
Definition: dly_tetra.cpp:86
ot_mathematique.h
DLY_TETRA::get_noeud4
DLY_NOEUD * get_noeud4(void)
Definition: dly_tetra.cpp:81
OPERATEUR::qualite_tetra
static double qualite_tetra(double *noeud1, double *noeud2, double *noeud3, double *noeud4)
Definition: ot_mathematique.cpp:1673
DLY_TETRA::tri3
class DLY_TRIANGLE * tri3
Definition: dly_tetra.h:100
OT_VECTEUR_3D::get_y
virtual double get_y(void) const
Definition: ot_mathematique.cpp:423
DLY_TETRA::get_triangle3
DLY_TRIANGLE * get_triangle3(void)
Definition: dly_tetra.cpp:104
OT_VECTEUR_3D
Definition: ot_mathematique.h:94
DLY_TETRA::tri4
class DLY_TRIANGLE * tri4
Definition: dly_tetra.h:101
DLY_TETRA::get_volume
double get_volume(void)
Definition: dly_tetra.cpp:278
DLY_TETRA::change_voisin3
void change_voisin3(DLY_TETRA *tet)
Definition: dly_tetra.cpp:211
sqrt
double2 sqrt(double2 &val)
Definition: ot_doubleprecision.cpp:345
DLY_TETRA::get_segment6
DLY_SEGMENT * get_segment6(void)
Definition: dly_tetra.cpp:132
dly_segment.h
DLY_TETRA::get_nb_fils
int get_nb_fils(void)
Definition: dly_tetra.cpp:231
DLY_TETRA::get_noeud1
DLY_NOEUD * get_noeud1(void)
Definition: dly_tetra.cpp:69
DLY_TETRA::change_voisin4
void change_voisin4(DLY_TETRA *tet)
Definition: dly_tetra.cpp:215
DLY_TETRA::seg3
class DLY_SEGMENT * seg3
Definition: dly_tetra.h:104
OT_VECTEUR_3D::get_z
virtual double get_z(void) const
Definition: ot_mathematique.cpp:429
DLY_TETRA::voisin3
DLY_TETRA * voisin3
Definition: dly_tetra.h:110
DLY_TETRA::normal3
double * normal3
Definition: dly_tetra.h:116
DLY_TETRA::seg5
class DLY_SEGMENT * seg5
Definition: dly_tetra.h:106
DLY_TETRA::voisin1
DLY_TETRA * voisin1
Definition: dly_tetra.h:108
DLY_TETRA::change_feuille
void change_feuille(int num)
Definition: dly_tetra.cpp:91
OT_VECTEUR_3D::get_longueur
virtual double get_longueur(void) const
Definition: ot_mathematique.cpp:483
dly_noeud.h
DLY_TETRA::get_segment4
DLY_SEGMENT * get_segment4(void)
Definition: dly_tetra.cpp:124
DLY_TETRA::get_voisin3
DLY_TETRA * get_voisin3(void)
Definition: dly_tetra.cpp:195
robustPredicates::orient3d
REAL orient3d(REAL *pa, REAL *pb, REAL *pc, REAL *pd)
Definition: robustpredicates.cc:2298
DLY_TETRA::seg6
class DLY_SEGMENT * seg6
Definition: dly_tetra.h:107
DLY_TETRA::get_voisin4
DLY_TETRA * get_voisin4(void)
Definition: dly_tetra.cpp:199
DLY_TETRA::change_triangle2
void change_triangle2(DLY_TRIANGLE *tri)
Definition: dly_tetra.cpp:141
DLY_TETRA
Definition: dly_tetra.h:30
DLY_TETRA::noeud4
DLY_NOEUD * noeud4
Definition: dly_tetra.h:97
DLY_TETRA::point_dans_le_tetra
int point_dans_le_tetra(double x, double y, double z)
Definition: dly_tetra.cpp:251
DLY_TETRA::fils
std::vector< DLY_TETRA * > fils
Definition: dly_tetra.h:113
DLY_TETRA::normal4
double * normal4
Definition: dly_tetra.h:116
DLY_TETRA::calcul_volume
double calcul_volume(class FCT_TAILLE *metrique=NULL, int conserve=1)
Definition: dly_tetra.cpp:282
DLY_TETRA::get_noeud2
DLY_NOEUD * get_noeud2(void)
Definition: dly_tetra.cpp:73
DLY_TETRA::get_segment5
DLY_SEGMENT * get_segment5(void)
Definition: dly_tetra.cpp:128
DLY_TETRA::get_fils
DLY_TETRA * get_fils(int i)
Definition: dly_tetra.cpp:235
DLY_TETRA::change_triangle3
void change_triangle3(DLY_TRIANGLE *tri)
Definition: dly_tetra.cpp:146
DLY_TETRA::qualite
double qualite
Definition: dly_tetra.h:115
DLY_TETRA::~DLY_TETRA
virtual ~DLY_TETRA()
Definition: dly_tetra.cpp:61
FCT_TAILLE::evaluer
virtual void evaluer(double *param, double *resultat)=0
DLY_TETRA::change_segment1
void change_segment1(DLY_SEGMENT *seg)
Definition: dly_tetra.cpp:156
mat
#define mat(i, j)