64 double P1[3]={x_point,y_point,z_point};
73 double tab_coord[3000];
76 for (
int i=0;i<nb_tet;i++)
119 xyzi[0]=(xyz1[0]+xyz2[0]+xyz3[0])/3.;
120 xyzi[1]=(xyz1[1]+xyz2[1]+xyz3[1])/3.;
121 xyzi[2]=(xyz1[2]+xyz2[2]+xyz3[2])/3.;
127 double hauteur = (perimetre/3.) * 0.8 ;
130 tab_coord[3*i]=xyzi[0]+normal.
get_x()*hauteur;
131 tab_coord[3*i+1]=xyzi[1]+normal.
get_y()*hauteur;
132 tab_coord[3*i+2]=xyzi[2]+normal.
get_z()*hauteur;
139 for (
int i=0;i<nb_tet;i++)
146 xopt=xopt+alpha*tab_coord[3*i];
147 yopt=yopt+alpha*tab_coord[3*i+1];
148 zopt=zopt+alpha*tab_coord[3*i+2];
157 double x_popt_ori=xopt-noeud->
get_x();
158 double y_popt_ori=yopt-noeud->
get_y();
159 double z_popt_ori=zopt-noeud->
get_z();
161 double dist=x_popt_ori*normal_plane(0)+y_popt_ori*normal_plane(1)+z_popt_ori*normal_plane(2);
163 double xopt_planar=xopt-dist*normal_plane(0);
164 double yopt_planar=yopt-dist*normal_plane(1);
165 double zopt_planar=zopt-dist*normal_plane(2);
172 double delta[3]={xopt-noeud->
get_x(),yopt-noeud->
get_y(),zopt-noeud->
get_z()};
173 double bmin=0.,bmax=1.;
174 double vieuxx=noeud->
get_x();
175 double vieuxy=noeud->
get_y();
176 double vieuxz=noeud->
get_z();
179 for (
int iteration=0;iteration<5;iteration++)
181 double alpha=(bmin+bmax)*0.5;
182 noeud->
change_x(vieuxx+alpha*delta[0]);
183 noeud->
change_y(vieuxy+alpha*delta[1]);
184 noeud->
change_z(vieuxz+alpha*delta[2]);
186 for (
int i=0;i<nb_tet;i++)
190 qualcour=std::min(qualcour,qual);
195 double alpha_eps=(bmin+bmax)*0.5-(bmax-bmin)/50.;
196 noeud->
change_x(vieuxx+alpha_eps*delta[0]);
197 noeud->
change_y(vieuxy+alpha_eps*delta[1]);
198 noeud->
change_z(vieuxz+alpha_eps*delta[2]);
199 double qualcour_eps=1.;
200 for (
int i=0;i<nb_tet;i++)
204 qualcour_eps=std::min(qualcour_eps,qual);
208 if (qualcour>qualcour_eps) bmin =alpha;
209 else if(qualcour<qualcour_eps) bmax=alpha;
214 qualini=std::max(qualini,qualcour);
221 if (qualini>qual_dep)
223 x=vieuxx+(bmin+bmax)*0.5*delta[0];
224 y=vieuxy+(bmin+bmax)*0.5*delta[1];
225 z=vieuxz+(bmin+bmax)*0.5*delta[2];
246 double dist_nodes_max=0.0;
247 for (
int i=0;i<nb_seg;i++)
253 dist_nodes_max=std::max(dist_nodes_max,dist_nodes);
262 for (
int i=0;i<nb_tet;i++)
270 double bmin=0.,bmax=1.;
271 double bmin2=0.,bmax2=1.;
272 double vieuxx=noeud->
get_x();
273 double vieuxy=noeud->
get_y();
274 double vieuxz=noeud->
get_z();
279 for (
int iteration=0;iteration<5;iteration++)
281 double alpha=(bmin+bmax)*0.5;
282 noeud->
change_x(vieuxx+alpha*dist_nodes_max*x_norm1);
283 noeud->
change_y(vieuxy+alpha*dist_nodes_max*y_norm1);
284 noeud->
change_z(vieuxz+alpha*dist_nodes_max*z_norm1);
286 for (
int i=0;i<nb_tet;i++)
290 qualcour=std::min(qualcour,qual);
295 double alpha_eps=(bmin+bmax)*0.5-(bmax-bmin)/50.;
296 noeud->
change_x(vieuxx+alpha_eps*dist_nodes_max*x_norm1);
297 noeud->
change_y(vieuxy+alpha_eps*dist_nodes_max*y_norm1);
298 noeud->
change_z(vieuxz+alpha_eps*dist_nodes_max*z_norm1);
299 double qualcour_eps=1.;
300 for (
int i=0;i<nb_tet;i++)
304 qualcour_eps=std::min(qualcour_eps,qual);
308 if (qualcour>qualcour_eps) bmin =alpha;
309 else if(qualcour<qualcour_eps) bmax=alpha;
314 qualini1=std::max(qualini1,qualcour);
317 for (
int iteration2=0;iteration2<5;iteration2++)
319 double alpha2=(bmin2+bmax2)*0.5;
320 noeud->
change_x(vieuxx-alpha2*dist_nodes_max*x_norm1);
321 noeud->
change_y(vieuxy-alpha2*dist_nodes_max*y_norm1);
322 noeud->
change_z(vieuxz-alpha2*dist_nodes_max*z_norm1);
324 for (
int i=0;i<nb_tet;i++)
328 qualcour=std::min(qualcour,qual);
333 double alpha_eps=(bmin2+bmax2)*0.5-(bmax2-bmin2)/50.;
334 noeud->
change_x(vieuxx-alpha_eps*dist_nodes_max*x_norm1);
335 noeud->
change_y(vieuxy-alpha_eps*dist_nodes_max*y_norm1);
336 noeud->
change_z(vieuxz-alpha_eps*dist_nodes_max*z_norm1);
337 double qualcour_eps=1.;
338 for (
int i=0;i<nb_tet;i++)
342 qualcour_eps=std::min(qualcour_eps,qual);
346 if (qualcour>qualcour_eps) bmin2 =alpha2;
347 else if(qualcour<qualcour_eps) bmax2=alpha2;
352 qualini2=std::max(qualini2,qualcour);
361 if ((qualini1>qual_dep)&&(qualini1>qualini2))
363 x=vieuxx+(bmin+bmax)*0.5*dist_nodes_max*x_norm1;
364 y=vieuxy+(bmin+bmax)*0.5*dist_nodes_max*y_norm1;
365 z=vieuxz+(bmin+bmax)*0.5*dist_nodes_max*z_norm1;
369 else if ((qualini2>qual_dep)&&(qualini2>qualini1))
371 x=vieuxx-(bmin2+bmax2)*0.5*dist_nodes_max*x_norm1;
372 y=vieuxy-(bmin2+bmax2)*0.5*dist_nodes_max*y_norm1;
373 z=vieuxz-(bmin2+bmax2)*0.5*dist_nodes_max*z_norm1;
387 double tab_coord[3000];
390 for (
int i=0;i<nb_tet;i++)
429 xyzi[0]=(xyz1[0]+xyz2[0]+xyz3[0])/3.;
430 xyzi[1]=(xyz1[1]+xyz2[1]+xyz3[1])/3.;
431 xyzi[2]=(xyz1[2]+xyz2[2]+xyz3[2])/3.;
437 double hauteur = (perimetre/3.) * 0.8 ;
440 tab_coord[3*i]=xyzi[0]+normal.
get_x()*hauteur;
441 tab_coord[3*i+1]=xyzi[1]+normal.
get_y()*hauteur;
442 tab_coord[3*i+2]=xyzi[2]+normal.
get_z()*hauteur;
455 for (
int i=0;i<nb_tet;i++)
462 xopt=xopt+alpha*tab_coord[3*i];
463 yopt=yopt+alpha*tab_coord[3*i+1];
464 zopt=zopt+alpha*tab_coord[3*i+2];
474 double delta[3]={xopt-noeud->
get_x(),yopt-noeud->
get_y(),zopt-noeud->
get_z()};
475 double bmin=0.,bmax=1.;
476 double vieuxx=noeud->
get_x();
477 double vieuxy=noeud->
get_y();
478 double vieuxz=noeud->
get_z();
481 for (
int iteration=0;iteration<5;iteration++)
483 double alpha=(bmin+bmax)*0.5;
484 noeud->
change_x(vieuxx+alpha*delta[0]);
485 noeud->
change_y(vieuxy+alpha*delta[1]);
486 noeud->
change_z(vieuxz+alpha*delta[2]);
488 for (
int i=0;i<nb_tet;i++)
492 qualcour=std::min(qualcour,qual);
494 double alpha_eps=(bmin+bmax)*0.5-(bmax-bmin)/50.;
495 noeud->
change_x(vieuxx+alpha_eps*delta[0]);
496 noeud->
change_y(vieuxy+alpha_eps*delta[1]);
497 noeud->
change_z(vieuxz+alpha_eps*delta[2]);
498 double qualcour_eps=1.;
499 for (
int i=0;i<nb_tet;i++)
503 qualcour_eps=std::min(qualcour_eps,qual);
505 if (qualcour>qualcour_eps) bmin =alpha;
506 else if(qualcour<qualcour_eps) bmax=alpha;
511 qualini=std::max(qualini,qualcour);
527 if (qualini>qual_dep)
529 x=vieuxx+(bmin+bmax)*0.5*delta[0];
530 y=vieuxy+(bmin+bmax)*0.5*delta[1];
531 z=vieuxz+(bmin+bmax)*0.5*delta[2];