47 double longueur_calculee=0.;
48 double param_debut[2]={u1-du,v1-dv};
50 mgface->
get_EFG(param_debut,E,F,G);
61 double t=0.7886751345*ti+0.2113248654*tii;
62 double u=u1+t*(u2-u1);
63 double v=v1+t*(v2-v1);
66 double param_integration1[2]={u-du,v-dv};
67 double tenseur_metrique[9];
71 mgface->
evaluer(param_integration1,xyz);
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;
86 double param_integration2[2]={u-du,v-dv};
87 mgface->
evaluer(param_integration2,xyz);
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);
100 return longueur_calculee;
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)
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;
114 double longueur_parametrique=vecteur_du_front.
get_longueur();
115 vecteur_du_front.norme();
116 vecteur_normal_front.
norme();
122 while (longueur_calculee<longueur_desiree)
130 while ((valide_u & valide_v & valide_xyz)!=1)
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));
139 if ((valide_u & valide_v)!=1) dt=dt/2.;
140 if ((valide_u & valide_v)==1)
143 mgface->
evaluer(param_tii,xyz);
145 if ((valide_xyz)!=1) dt=dt/2.;
147 if (dt<0.0000001)
return 0;
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];
160 mgface->
evaluer(param_integration1,xyz);
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;
174 double param_integration2[2]={u-du,v-dv};
175 mgface->
evaluer(param_integration2,xyz);
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);
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;
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)
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;
212 while (longueur_calculee<longueur_desiree)
220 while ((valide_u & valide_v & valide_xyz)!=1)
222 tii=ti+longueur_parametrique*dt;
223 uii=u1+tii*vecteur.
get_x();
224 vii=v1+tii*vecteur.
get_y();
229 if ((valide_u & valide_v)!=1) dt=dt/2.;
230 if ((valide_u & valide_v)==1)
233 mgface->
evaluer(param_tii,xyz);
235 if ((valide_xyz)!=1) dt=dt/2.;
237 if (dt<0.0000001)
return 0;
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();
245 double param_integration1[2]={u-du,v-dv};
246 double tenseur_metrique[9];
250 mgface->
evaluer(param_integration1,xyz);
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;
264 double param_integration2[2]={u-du,v-dv};
265 mgface->
evaluer(param_integration2,xyz);
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);
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);
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++)
295 double tii=1.0*(i+1)/pas;
296 double tgauss1=0.7886751345*tii+0.2113248654*ti;
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]);
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]);
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;
328 double longueur=0,ancienne_longueur;
331 dxyz[0]=xyz2[0]-xyz1[0];
332 dxyz[1]=xyz2[1]-xyz1[1];
333 dxyz[2]=xyz2[2]-xyz1[2];
337 ancienne_longueur=longueur;
340 double tgauss1=0.7886751345*tii+0.2113248654*ti;
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]);
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]);
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;
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]);
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;
402 poids_gauss[1]=0.041666666666666;
406 poids_gauss[2]=0.041666666666666;
410 poids_gauss[3]=0.041666666666666;
417 double facteur=(vec1&vec2)*vec3;
419 for (
int j=0;j<4;j++)
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];
427 double dens=1/
sqrt(tenseur[0]);
429 vol=vol+poids_gauss[j]*facteur*8.485281374/dens;