MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
fct_taille.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 //####// fct_taille.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:52 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #include "gestionversion.h"
23 #include "fct_taille.h"
24 #include <math.h>
25 #include "mg_gestionnaire.h"
26 #include "ot_decalage_parametre.h"
27 
29 {
30 MG_NOEUD* noeud1=mgsegment->get_noeud1();
31 MG_NOEUD* noeud2=mgsegment->get_noeud2();
32 
33 double du=decalage->calcul_decalage_parametre_u(noeud1->get_u());
34 double dv=decalage->calcul_decalage_parametre_v(noeud1->get_v());
35 double u1=decalage->decalage_parametre_u(noeud1->get_u(),du);
36 double v1=decalage->decalage_parametre_v(noeud1->get_v(),dv);
37 double u2=decalage->decalage_parametre_u(noeud2->get_u(),du);
38 double v2=decalage->decalage_parametre_v(noeud2->get_v(),dv);
39 return calcule_distance_metrique(mgface,u1,v1,u2,v2,du,dv,pas);
40 }
41 
42 
43 
44 
45 double FCT_TAILLE::calcule_distance_metrique(MG_FACE* mgface,double u1,double v1,double u2,double v2,double du,double dv,int pas)
46 {
47 double longueur_calculee=0.;
48 double param_debut[2]={u1-du,v1-dv};
49 double E,F,G;
50 mgface->get_EFG(param_debut,E,F,G);
51 
52 double dt=1./pas;
53 double ti;
54 double tii=0;
55 
56 while (tii<1.)
57  {
58  ti=tii;
59  tii=ti+dt;
60  if (tii>1.) tii=1.;
61  double t=0.7886751345*ti+0.2113248654*tii;
62  double u=u1+t*(u2-u1);
63  double v=v1+t*(v2-v1);
64  double ut=u2-u1;
65  double vt=v2-v1;
66  double param_integration1[2]={u-du,v-dv};
67  double tenseur_metrique[9];
68  double xyzdu[3];
69  double xyzdv[3];
70  double xyz[3];
71  mgface->evaluer(param_integration1,xyz);
72  if (valide_parametre(xyz)) evaluer(xyz,tenseur_metrique);
73  else return 1e308;
74  mgface->deriver(param_integration1,xyzdu,xyzdv);
75  double t3 = xyzdu[0]*ut+xyzdv[0]*vt;
76  double t7 = xyzdu[1]*ut+xyzdv[1]*vt;
77  double t11 = xyzdu[2]*ut+xyzdv[2]*vt;
78  double t13 = t3*tenseur_metrique[0]+t7*tenseur_metrique[3]+t11*tenseur_metrique[6];
79  double t18 = t3*tenseur_metrique[1]+t7*tenseur_metrique[4]+t11*tenseur_metrique[7];
80  double t23 = t3*tenseur_metrique[2]+t7*tenseur_metrique[5]+t11*tenseur_metrique[8];
81  double facteur = (t13*xyzdu[0]+t18*xyzdu[1]+t23*xyzdu[2])*ut+(t13*xyzdv[0]+t18*xyzdv[1]+t23*xyzdv[2])*vt;
82  longueur_calculee=longueur_calculee+0.5*(tii-ti)*sqrt(facteur);
83  t=0.7886751345*tii+0.2113248654*ti;
84  u=u1+t*(u2-u1);
85  v=v1+t*(v2-v1);
86  double param_integration2[2]={u-du,v-dv};
87  mgface->evaluer(param_integration2,xyz);
88  if (valide_parametre(xyz)) evaluer(xyz,tenseur_metrique);
89  else return 1e308;
90  mgface->deriver(param_integration2,xyzdu,xyzdv);
91  t3 = xyzdu[0]*ut+xyzdv[0]*vt;
92  t7 = xyzdu[1]*ut+xyzdv[1]*vt;
93  t11 = xyzdu[2]*ut+xyzdv[2]*vt;
94  t13 = t3*tenseur_metrique[0]+t7*tenseur_metrique[3]+t11*tenseur_metrique[6];
95  t18 = t3*tenseur_metrique[1]+t7*tenseur_metrique[4]+t11*tenseur_metrique[7];
96  t23 = t3*tenseur_metrique[2]+t7*tenseur_metrique[5]+t11*tenseur_metrique[8];
97  facteur = (t13*xyzdu[0]+t18*xyzdu[1]+t23*xyzdu[2])*ut+(t13*xyzdv[0]+t18*xyzdv[1]+t23*xyzdv[2])*vt;
98  longueur_calculee=longueur_calculee+0.5*(tii-ti)*sqrt(facteur);
99  }
100 return longueur_calculee;
101 }
102 
103 
104 
105 int FCT_TAILLE::ajuste_distance_ortho_metrique(MG_FACE* mgface,double u1,double v1,double u2,double v2,double &udecale,double &vdecale,double longueur_desiree,double du,double dv,double teta,int pas)
106 {
107 OT_VECTEUR_3D w(0.,0.,1.);
108 double umilieu=0.5*(u1+u2);
109 double vmilieu=0.5*(v1+v2);
110 double longueur_calculee=0.;
111 double longueur_calculee_pas_precedent;
112 OT_VECTEUR_3D vecteur_du_front(u2-u1,v2-v1,0.);
113 OT_VECTEUR_3D vecteur_normal_front=w&vecteur_du_front;
114 double longueur_parametrique=vecteur_du_front.get_longueur();
115 vecteur_du_front.norme();
116 vecteur_normal_front.norme();
117 double dt=1./pas;
118 double ti;
119 double tii=0;
120 double uii;
121 double vii;
122 while (longueur_calculee<longueur_desiree)
123 {
124  ti=tii;
125  dt=0.03125;
126  double param_tii[2];
127  int valide_u=0;
128  int valide_v=0;
129  int valide_xyz=0;
130  while ((valide_u & valide_v & valide_xyz)!=1)
131  {
132  tii=ti+longueur_parametrique*dt;
133  uii=umilieu+tii*(vecteur_du_front.get_x()*sin(teta)+vecteur_normal_front.get_x()*cos(teta));
134  vii=vmilieu+tii*(vecteur_du_front.get_y()*sin(teta)+vecteur_normal_front.get_y()*cos(teta));
135  param_tii[0]=uii-du;
136  param_tii[1]=vii-dv;
137  if (mgface->valide_parametre_u(param_tii[0])) valide_u=1;
138  if (mgface->valide_parametre_v(param_tii[1])) valide_v=1;
139  if ((valide_u & valide_v)!=1) dt=dt/2.;
140  if ((valide_u & valide_v)==1)
141  {
142  double xyz[3];
143  mgface->evaluer(param_tii,xyz);
144  valide_xyz=valide_parametre(xyz);
145  if ((valide_xyz)!=1) dt=dt/2.;
146  }
147  if (dt<0.0000001) return 0;
148  }
149  longueur_calculee_pas_precedent=longueur_calculee;
150  double t=0.7886751345*ti+0.2113248654*tii;
151  double ut=vecteur_du_front.get_x()*sin(teta)+vecteur_normal_front.get_x()*cos(teta);
152  double vt=vecteur_du_front.get_y()*sin(teta)+vecteur_normal_front.get_y()*cos(teta);
153  double u=umilieu+t*ut;
154  double v=vmilieu+t*vt;;
155  double param_integration1[2]={u-du,v-dv};
156  double tenseur_metrique[9];
157  double xyzdu[3];
158  double xyzdv[3];
159  double xyz[3];
160  mgface->evaluer(param_integration1,xyz);
161  evaluer(xyz,tenseur_metrique);
162  mgface->deriver(param_integration1,xyzdu,xyzdv);
163  double t3 = xyzdu[0]*ut+xyzdv[0]*vt;
164  double t7 = xyzdu[1]*ut+xyzdv[1]*vt;
165  double t11 = xyzdu[2]*ut+xyzdv[2]*vt;
166  double t13 = t3*tenseur_metrique[0]+t7*tenseur_metrique[3]+t11*tenseur_metrique[6];
167  double t18 = t3*tenseur_metrique[1]+t7*tenseur_metrique[4]+t11*tenseur_metrique[7];
168  double t23 = t3*tenseur_metrique[2]+t7*tenseur_metrique[5]+t11*tenseur_metrique[8];
169  double facteur = (t13*xyzdu[0]+t18*xyzdu[1]+t23*xyzdu[2])*ut+(t13*xyzdv[0]+t18*xyzdv[1]+t23*xyzdv[2])*vt;
170  longueur_calculee=longueur_calculee+0.5*(tii-ti)*sqrt(facteur);
171  t=0.7886751345*tii+0.2113248654*ti;
172  u=umilieu+t*ut;
173  v=vmilieu+t*vt;;
174  double param_integration2[2]={u-du,v-dv};
175  mgface->evaluer(param_integration2,xyz);
176  evaluer(xyz,tenseur_metrique);
177  mgface->deriver(param_integration2,xyzdu,xyzdv);
178  t3 = xyzdu[0]*ut+xyzdv[0]*vt;
179  t7 = xyzdu[1]*ut+xyzdv[1]*vt;
180  t11 = xyzdu[2]*ut+xyzdv[2]*vt;
181  t13 = t3*tenseur_metrique[0]+t7*tenseur_metrique[3]+t11*tenseur_metrique[6];
182  t18 = t3*tenseur_metrique[1]+t7*tenseur_metrique[4]+t11*tenseur_metrique[7];
183  t23 = t3*tenseur_metrique[2]+t7*tenseur_metrique[5]+t11*tenseur_metrique[8];
184  facteur = (t13*xyzdu[0]+t18*xyzdu[1]+t23*xyzdu[2])*ut+(t13*xyzdv[0]+t18*xyzdv[1]+t23*xyzdv[2])*vt;
185  longueur_calculee=longueur_calculee+0.5*(tii-ti)*sqrt(facteur);
186 }
187 double ut=vecteur_du_front.get_x()*sin(teta)+vecteur_normal_front.get_x()*cos(teta);
188 double vt=vecteur_du_front.get_y()*sin(teta)+vecteur_normal_front.get_y()*cos(teta);
189 double t=ti+(tii-ti)*(longueur_desiree-longueur_calculee_pas_precedent)/(longueur_calculee-longueur_calculee_pas_precedent);
190 udecale=umilieu+t*ut;
191 vdecale=vmilieu+t*vt;
192 return 1;
193 }
194 
195 
196 
197 int FCT_TAILLE::ajuste_distance_metrique(MG_FACE* mgface,double u1,double v1,double u2,double v2,double &udecale,double &vdecale,double longueur_desiree,double du,double dv,int pas)
198 {
199 OT_VECTEUR_3D w(0.,0.,1.);
200 double umilieu=0.5*(u1+u2);
201 double vmilieu=0.5*(v1+v2);
202 double longueur_calculee=0.;
203 double longueur_calculee_pas_precedent;
204 OT_VECTEUR_3D vecteur(u2-u1,v2-v1,0.);
205 double longueur_parametrique=vecteur.get_longueur();
206 vecteur.norme();
207 double dt=1./pas;
208 double ti;
209 double tii=0;
210 double uii;
211 double vii;
212 while (longueur_calculee<longueur_desiree)
213 {
214  ti=tii;
215  //dt=0.03125;
216  double param_tii[2];
217  int valide_u=0;
218  int valide_v=0;
219  int valide_xyz=0;
220  while ((valide_u & valide_v & valide_xyz)!=1)
221  {
222  tii=ti+longueur_parametrique*dt;
223  uii=u1+tii*vecteur.get_x();
224  vii=v1+tii*vecteur.get_y();
225  param_tii[0]=uii-du;
226  param_tii[1]=vii-dv;
227  if (mgface->valide_parametre_u(param_tii[0])) valide_u=1;
228  if (mgface->valide_parametre_v(param_tii[1])) valide_v=1;
229  if ((valide_u & valide_v)!=1) dt=dt/2.;
230  if ((valide_u & valide_v)==1)
231  {
232  double xyz[3];
233  mgface->evaluer(param_tii,xyz);
234  valide_xyz=valide_parametre(xyz);
235  if ((valide_xyz)!=1) dt=dt/2.;
236  }
237  if (dt<0.0000001) return 0;
238  }
239  longueur_calculee_pas_precedent=longueur_calculee;
240  double t=0.7886751345*ti+0.2113248654*tii;
241  double ut=vecteur.get_x();
242  double vt=vecteur.get_y();
243  double u=u1+t*ut;
244  double v=v1+t*vt;;
245  double param_integration1[2]={u-du,v-dv};
246  double tenseur_metrique[9];
247  double xyzdu[3];
248  double xyzdv[3];
249  double xyz[3];
250  mgface->evaluer(param_integration1,xyz);
251  evaluer(xyz,tenseur_metrique);
252  mgface->deriver(param_integration1,xyzdu,xyzdv);
253  double t3 = xyzdu[0]*ut+xyzdv[0]*vt;
254  double t7 = xyzdu[1]*ut+xyzdv[1]*vt;
255  double t11 = xyzdu[2]*ut+xyzdv[2]*vt;
256  double t13 = t3*tenseur_metrique[0]+t7*tenseur_metrique[3]+t11*tenseur_metrique[6];
257  double t18 = t3*tenseur_metrique[1]+t7*tenseur_metrique[4]+t11*tenseur_metrique[7];
258  double t23 = t3*tenseur_metrique[2]+t7*tenseur_metrique[5]+t11*tenseur_metrique[8];
259  double facteur = (t13*xyzdu[0]+t18*xyzdu[1]+t23*xyzdu[2])*ut+(t13*xyzdv[0]+t18*xyzdv[1]+t23*xyzdv[2])*vt;
260  longueur_calculee=longueur_calculee+0.5*(tii-ti)*sqrt(facteur);
261  t=0.7886751345*tii+0.2113248654*ti;
262  u=u1+t*ut;
263  v=v1+t*vt;;
264  double param_integration2[2]={u-du,v-dv};
265  mgface->evaluer(param_integration2,xyz);
266  evaluer(xyz,tenseur_metrique);
267  mgface->deriver(param_integration2,xyzdu,xyzdv);
268  t3 = xyzdu[0]*ut+xyzdv[0]*vt;
269  t7 = xyzdu[1]*ut+xyzdv[1]*vt;
270  t11 = xyzdu[2]*ut+xyzdv[2]*vt;
271  t13 = t3*tenseur_metrique[0]+t7*tenseur_metrique[3]+t11*tenseur_metrique[6];
272  t18 = t3*tenseur_metrique[1]+t7*tenseur_metrique[4]+t11*tenseur_metrique[7];
273  t23 = t3*tenseur_metrique[2]+t7*tenseur_metrique[5]+t11*tenseur_metrique[8];
274  facteur = (t13*xyzdu[0]+t18*xyzdu[1]+t23*xyzdu[2])*ut+(t13*xyzdv[0]+t18*xyzdv[1]+t23*xyzdv[2])*vt;
275  longueur_calculee=longueur_calculee+0.5*(tii-ti)*sqrt(facteur);
276 }
277 double ut=vecteur.get_x();
278 double vt=vecteur.get_y();
279 double t=ti+(tii-ti)*(longueur_desiree-longueur_calculee_pas_precedent)/(longueur_calculee-longueur_calculee_pas_precedent);
280 udecale=u1+t*ut;
281 vdecale=v1+t*vt;
282 return 1;
283 }
284 
285 double FCT_TAILLE::calcul_distance_metrique(double *xyz1,double* xyz2,int pas)
286 {
287  double longueur=0.;
288  double dxyz[3];
289  dxyz[0]=xyz2[0]-xyz1[0];
290  dxyz[1]=xyz2[1]-xyz1[1];
291  dxyz[2]=xyz2[2]-xyz1[2];
292  for (int i=0;i<pas;i++)
293  {
294  double ti=1.0*i/pas;
295  double tii=1.0*(i+1)/pas;
296  double tgauss1=0.7886751345*tii+0.2113248654*ti;
297  double xyz[3];
298  xyz[0]=xyz1[0]+tgauss1*(xyz2[0]-xyz1[0]);
299  xyz[1]=xyz1[1]+tgauss1*(xyz2[1]-xyz1[1]);
300  xyz[2]=xyz1[2]+tgauss1*(xyz2[2]-xyz1[2]);
301  double tenseur[9];
302  evaluer(xyz,tenseur);
303  double val= sqrt(dxyz[0]*dxyz[0]*tenseur[0]+dxyz[0]*dxyz[1]*tenseur[3]+dxyz[0]*dxyz[2]*tenseur[6]+dxyz[1]*dxyz[0]*tenseur[1]+dxyz[1]*dxyz[1]*tenseur[4]+dxyz[1]*dxyz[2]*tenseur[7]+dxyz[2]*dxyz[0]*tenseur[2]+dxyz[2]*dxyz[1]*tenseur[5]+dxyz[2]*dxyz[2]*tenseur[8]);
304  longueur=longueur+0.5*(tii-ti)*val;
305  double tgauss2=0.7886751345*ti+0.2113248654*tii;
306  xyz[0]=xyz1[0]+tgauss2*(xyz2[0]-xyz1[0]);
307  xyz[1]=xyz1[1]+tgauss2*(xyz2[1]-xyz1[1]);
308  xyz[2]=xyz1[2]+tgauss2*(xyz2[2]-xyz1[2]);
309  evaluer(xyz,tenseur);
310  val= sqrt(dxyz[0]*dxyz[0]*tenseur[0]+dxyz[0]*dxyz[1]*tenseur[3]+dxyz[0]*dxyz[2]*tenseur[6]+dxyz[1]*dxyz[0]*tenseur[1]+dxyz[1]*dxyz[1]*tenseur[4]+dxyz[1]*dxyz[2]*tenseur[7]+dxyz[2]*dxyz[0]*tenseur[2]+dxyz[2]*dxyz[1]*tenseur[5]+dxyz[2]*dxyz[2]*tenseur[8]);
311  longueur=longueur+0.5*(tii-ti)*val;
312  }
313  return longueur;
314 }
315 
316 
317 
319 {
320  double *xyz1=seg->get_noeud1()->get_coord();
321  double *xyz2=seg->get_noeud2()->get_coord();
322  return calcul_distance_metrique(xyz1,xyz2,pas);
323 }
324 
325 
326 int FCT_TAILLE::ajuste_distance_metrique(double *xyz1,double *xyz2,double longueur_desiree,int pas)
327 {
328  double longueur=0,ancienne_longueur;
329  double ti,tii;
330  double dxyz[3];
331  dxyz[0]=xyz2[0]-xyz1[0];
332  dxyz[1]=xyz2[1]-xyz1[1];
333  dxyz[2]=xyz2[2]-xyz1[2];
334  int i=0;
335  do
336  {
337  ancienne_longueur=longueur;
338  ti=1.0*i/pas;
339  tii=1.0*(i+1)/pas;
340  double tgauss1=0.7886751345*tii+0.2113248654*ti;
341  double xyz[3];
342  xyz[0]=xyz1[0]+tgauss1*(xyz2[0]-xyz1[0]);
343  xyz[1]=xyz1[1]+tgauss1*(xyz2[1]-xyz1[1]);
344  xyz[2]=xyz1[2]+tgauss1*(xyz2[2]-xyz1[2]);
345  if (i+1>pas)
346  {
347  int val=valide_parametre(xyz);
348  if (!val) return 0;
349  }
350  double tenseur[9];
351  evaluer(xyz,tenseur);
352  double val= sqrt(dxyz[0]*dxyz[0]*tenseur[0]+dxyz[0]*dxyz[1]*tenseur[3]+dxyz[0]*dxyz[2]*tenseur[6]+dxyz[1]*dxyz[0]*tenseur[1]+dxyz[1]*dxyz[1]*tenseur[4]+dxyz[1]*dxyz[2]*tenseur[7]+dxyz[2]*dxyz[0]*tenseur[2]+dxyz[2]*dxyz[1]*tenseur[5]+dxyz[2]*dxyz[2]*tenseur[8]);
353  longueur=longueur+0.5*(tii-ti)*val;
354  double tgauss2=0.7886751345*ti+0.2113248654*tii;
355  xyz[0]=xyz1[0]+tgauss2*(xyz2[0]-xyz1[0]);
356  xyz[1]=xyz1[1]+tgauss2*(xyz2[1]-xyz1[1]);
357  xyz[2]=xyz1[2]+tgauss2*(xyz2[2]-xyz1[2]);
358  if (i+1>pas)
359  {
360  int val=valide_parametre(xyz);
361  if (!val) return 0;
362  }
363  evaluer(xyz,tenseur);
364  val= sqrt(dxyz[0]*dxyz[0]*tenseur[0]+dxyz[0]*dxyz[1]*tenseur[3]+dxyz[0]*dxyz[2]*tenseur[6]+dxyz[1]*dxyz[0]*tenseur[1]+dxyz[1]*dxyz[1]*tenseur[4]+dxyz[1]*dxyz[2]*tenseur[7]+dxyz[2]*dxyz[0]*tenseur[2]+dxyz[2]*dxyz[1]*tenseur[5]+dxyz[2]*dxyz[2]*tenseur[8]);
365  longueur=longueur+0.5*(tii-ti)*val;
366  i++;
367  }
368  while (longueur<longueur_desiree);
369  double t=ti+(tii-ti)*(longueur_desiree-ancienne_longueur)/(longueur-ancienne_longueur);
370  xyz2[0]=xyz1[0]+t*(xyz2[0]-xyz1[0]);
371  xyz2[1]=xyz1[1]+t*(xyz2[1]-xyz1[1]);
372  xyz2[2]=xyz1[2]+t*(xyz2[2]-xyz1[2]);
373  return 1;
374 }
375 
376 
378 {
379  double *xyz1=tet->get_noeud1()->get_coord();
380  double *xyz2=tet->get_noeud2()->get_coord();
381  double *xyz3=tet->get_noeud3()->get_coord();
382  double *xyz4=tet->get_noeud4()->get_coord();
383  /*double xyzm[3];
384  double xyzg[3];
385  xyzm[0]=(xyz1[0]+xyz2[0])/2.;
386  xyzm[1]=(xyz1[1]+xyz2[1])/2.;
387  xyzm[2]=(xyz1[2]+xyz2[2])/2.;
388  xyzg[0]=(xyz1[0]+xyz2[0]+xyz3[0])/3.;
389  xyzg[1]=(xyz1[1]+xyz2[1]+xyz3[1])/3.;
390  xyzg[2]=(xyz1[2]+xyz2[2]+xyz3[2])/3.;
391  double base=calcul_distance_metrique(xyz1,xyz2);
392  double hauteur=calcul_distance_metrique(xyzm,xyz3);
393  double hauteur2=calcul_distance_metrique(xyzg,xyz4);
394  double vol=base*hauteur*hauteur2*1.414213562;*/
395  double a=0.1381966012;
396  double b=0.5854101965;
397  double poids_gauss[4],xsi_gauss[4],eta_gauss[4],zeta_gauss[4];
398  poids_gauss[0]=0.041666666666666;
399  xsi_gauss[0]=a;
400  eta_gauss[0]=a;
401  zeta_gauss[0]=a;
402  poids_gauss[1]=0.041666666666666;
403  xsi_gauss[1]=a;
404  eta_gauss[1]=a;
405  zeta_gauss[1]=b;
406  poids_gauss[2]=0.041666666666666;
407  xsi_gauss[2]=a;
408  eta_gauss[2]=b;
409  zeta_gauss[2]=a;
410  poids_gauss[3]=0.041666666666666;
411  xsi_gauss[3]=b;
412  eta_gauss[3]=a;
413  zeta_gauss[3]=a;
414  OT_VECTEUR_3D vec1(xyz1,xyz2);
415  OT_VECTEUR_3D vec2(xyz1,xyz3);
416  OT_VECTEUR_3D vec3(xyz1,xyz4);
417  double facteur=(vec1&vec2)*vec3;
418  double vol=0.;
419  for (int j=0;j<4;j++)
420  {
421  double xyz[3];
422  xyz[0]=(1-xsi_gauss[j]-eta_gauss[j]-zeta_gauss[j])*xyz1[0]+xsi_gauss[j]*xyz2[0]+eta_gauss[j]*xyz3[0]+zeta_gauss[j]*xyz4[0];
423  xyz[1]=(1-xsi_gauss[j]-eta_gauss[j]-zeta_gauss[j])*xyz1[1]+xsi_gauss[j]*xyz2[1]+eta_gauss[j]*xyz3[1]+zeta_gauss[j]*xyz4[1];
424  xyz[2]=(1-xsi_gauss[j]-eta_gauss[j]-zeta_gauss[j])*xyz1[2]+xsi_gauss[j]*xyz2[2]+eta_gauss[j]*xyz3[2]+zeta_gauss[j]*xyz4[2];
425  double tenseur[9];
426  evaluer(xyz,tenseur);
427  double dens=1/sqrt(tenseur[0]);
428  dens=dens*dens*dens;
429  vol=vol+poids_gauss[j]*facteur*8.485281374/dens;
430  }
431 
432  return vol;
433 }
434 
435 void FCT_TAILLE::get_fichier_dependant(std::vector<std::string> &liste_fichier)
436 {
437 
438 }
439 
441 {
442  fonc_affiche = fonc;
443  affichageactif = 1;
444 }
445 
446 void FCT_TAILLE::affiche(char* message)
447 {
448  if(affichageactif==1) fonc_affiche(message);
449 }
MG_SEGMENT
Definition: mg_segment.h:38
MG_TETRA::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_tetra.cpp:148
fct_taille.h
gestionversion.h
FCT_TAILLE::calcule_longueur_segment_metrique
virtual double calcule_longueur_segment_metrique(class MG_FACE *mgface, class MG_SEGMENT *mgsegment, class OT_DECALAGE_PARAMETRE *decalage, int pas=32)
Definition: fct_taille.cpp:28
mg_gestionnaire.h
MG_SEGMENT::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_segment.cpp:113
MG_TETRA::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_tetra.cpp:143
a
#define a(i, j)
FCT_TAILLE::get_fichier_dependant
virtual void get_fichier_dependant(std::vector< std::string > &liste_fichier)
Definition: fct_taille.cpp:435
double2::get_x
double get_x()
Definition: ot_doubleprecision.cpp:367
OT_VECTEUR_3D::get_x
virtual double get_x(void) const
Definition: ot_mathematique.cpp:417
MG_TETRA
Definition: mg_tetra.h:37
FCT_TAILLE::valide_parametre
virtual int valide_parametre(double *param)=0
ot_decalage_parametre.h
MG_FACE::deriver
virtual void deriver(double *uv, double *xyzdu, double *xyzdv)
Definition: mg_face.cpp:199
FCT_TAILLE::calcul_distance_metrique
virtual double calcul_distance_metrique(class MG_SEGMENT *seg, int pas=32)
Definition: fct_taille.cpp:318
MG_NOEUD::get_u
virtual double get_u(void)
Definition: mg_noeud.cpp:108
FCT_TAILLE::fonc_affiche
fonction_affiche * fonc_affiche
Definition: fct_taille.h:64
MG_FACE::evaluer
virtual void evaluer(double *uv, double *xyz)
Definition: mg_face.cpp:192
FCT_TAILLE::affichageactif
int affichageactif
Definition: fct_taille.h:63
MG_FACE::valide_parametre_u
virtual int valide_parametre_u(double &u)
Definition: mg_face.cpp:150
MG_SEGMENT::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_segment.cpp:108
MG_NOEUD
Definition: mg_noeud.h:41
FCT_TAILLE::ajuste_distance_metrique
virtual int ajuste_distance_metrique(double *xyz1, double *xyz2, double longueur_desiree, int pas=32)
Definition: fct_taille.cpp:326
FCT_TAILLE::calcule_distance_metrique
virtual double calcule_distance_metrique(class MG_FACE *mgface, double u1, double v1, double u2, double v2, double du, double dv, int pas=32)
Definition: fct_taille.cpp:45
MG_NOEUD::get_coord
virtual double * get_coord(void)
Definition: mg_noeud.cpp:92
MG_FACE::valide_parametre_v
virtual int valide_parametre_v(double &v)
Definition: mg_face.cpp:172
FCT_TAILLE::affiche
void affiche(char *message)
Definition: fct_taille.cpp:446
OT_VECTEUR_3D::norme
virtual void norme(void)
Definition: ot_mathematique.cpp:494
FCT_TAILLE::calcul_volume_tetra_metrique
virtual double calcul_volume_tetra_metrique(class MG_TETRA *tet)
Definition: fct_taille.cpp:377
OT_DECALAGE_PARAMETRE::decalage_parametre_u
double decalage_parametre_u(double par, double dpar)
Definition: ot_decalage_parametre.cpp:51
MG_NOEUD::get_v
virtual double get_v(void)
Definition: mg_noeud.cpp:113
OT_VECTEUR_3D::get_y
virtual double get_y(void) const
Definition: ot_mathematique.cpp:423
FCT_TAILLE::active_affichage
void active_affichage(fonction_affiche *fonc)
Definition: fct_taille.cpp:440
OT_VECTEUR_3D
Definition: ot_mathematique.h:94
MG_TETRA::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_tetra.cpp:158
sqrt
double2 sqrt(double2 &val)
Definition: ot_doubleprecision.cpp:345
OT_DECALAGE_PARAMETRE::calcul_decalage_parametre_v
double calcul_decalage_parametre_v(double par)
Definition: ot_decalage_parametre.cpp:43
MG_TETRA::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_tetra.cpp:153
OT_DECALAGE_PARAMETRE::calcul_decalage_parametre_u
double calcul_decalage_parametre_u(double par)
Definition: ot_decalage_parametre.cpp:35
OT_VECTEUR_3D::get_longueur
virtual double get_longueur(void) const
Definition: ot_mathematique.cpp:483
OT_DECALAGE_PARAMETRE::decalage_parametre_v
double decalage_parametre_v(double par, double dpar)
Definition: ot_decalage_parametre.cpp:75
fonction_affiche
void fonction_affiche(char *)
Definition: fct_taille.h:28
MG_FACE
Definition: mg_face.h:34
cos
double2 cos(double2 &val)
Definition: ot_doubleprecision.cpp:206
OT_DECALAGE_PARAMETRE
Definition: ot_decalage_parametre.h:28
MG_FACE::get_EFG
virtual void get_EFG(double *uv, double &E, double &F, double &G)
Definition: mg_face.cpp:264
FCT_TAILLE::ajuste_distance_ortho_metrique
virtual int ajuste_distance_ortho_metrique(class MG_FACE *mgface, double u1, double v1, double u2, double v2, double &udecale, double &vdecale, double longueur_desiree, double du, double dv, double teta, int pas=32)
Definition: fct_taille.cpp:105
FCT_TAILLE::evaluer
virtual void evaluer(double *param, double *resultat)=0
sin
double2 sin(double2 &val)
Definition: ot_doubleprecision.cpp:250