50 LISTE_MG_TRIANGLE::iterator ittr;
54 M3D_TRIANGLE* nvtri=
new M3D_TRIANGLE(tri->get_id(),tri->get_lien_topologie(),tri->get_noeud1(),tri->get_noeud2(),tri->get_noeud3(),tri->get_segment1(),tri->get_segment2(),tri->get_segment3(),tri->get_origine());
66 liste_noeud.
ajouter(tri->get_noeud1());
67 liste_noeud.
ajouter(tri->get_noeud2());
68 liste_noeud.
ajouter(tri->get_noeud3());
72 for (
int i=0;i<nbcoquille;i++)
76 for (
int j=0;j<nbface;j++)
88 LISTE_MG_TRIANGLE::iterator ittr;
92 M3D_TRIANGLE* nvtri=
new M3D_TRIANGLE(tri->get_id(),tri->get_lien_topologie(),tri->get_noeud1(),tri->get_noeud2(),tri->get_noeud3(),tri->get_segment1(),tri->get_segment2(),tri->get_segment3(),tri->get_origine());
104 liste_noeud.
ajouter(tri->get_noeud1());
105 liste_noeud.
ajouter(tri->get_noeud2());
106 liste_noeud.
ajouter(tri->get_noeud3());
110 for (
int i=0;i<nbcoquille;i++)
114 for (
int j=0;j<nbface;j++)
129 liste_noeud.
ajouter(mgtri->get_noeud1());
130 liste_noeud.
ajouter(mgtri->get_noeud2());
131 liste_noeud.
ajouter(mgtri->get_noeud3());
137 double *xyz=no->get_coord();
162 std::pair<double,M3D_TRIANGLE*> tmp(val,tri);
163 ORDRE_TRIANGLE::iterator p=
lst_tri[num].insert(tmp);
178 lst_tri[num].erase(it->second);
188 std::vector<int> strategie;
189 char* code=(
char*)
param.
get_nom(
"Optimisation_2D").c_str();
190 for (
int i=0;i<strlen(code);i++)
192 if (code[i]==
'1') strategie.push_back(1);
193 if (code[i]==
'2') strategie.push_back(2);
194 if (code[i]==
'3') strategie.push_back(3);
195 if (code[i]==
'4') strategie.push_back(4);
198 int nb_level=strategie.size();
199 std::string info=
" stratégie d'optimisation ";
200 for (
int level=0;level<nb_level;level++)
203 sprintf(chaine,
"%d",strategie[level]);
204 info = info + chaine;
217 for (
int phase=0;phase<2;phase++)
222 ORDRE_TRIANGLE::iterator i=
lst_tri[phase].begin();
230 switch (strategie[level])
295 if ((*autretri)==NULL)
return 0;
298 if (((*autretri)->get_noeud1()!=no1) && ((*autretri)->get_noeud1()!=no2)) no4=(*autretri)->get_noeud1();
299 if (((*autretri)->get_noeud2()!=no1) && ((*autretri)->get_noeud2()!=no2)) no4=(*autretri)->get_noeud2();
300 if (((*autretri)->get_noeud3()!=no1) && ((*autretri)->get_noeud3()!=no2)) no4=(*autretri)->get_noeud3();
302 double qual2=(*autretri)->get_qualite();
303 double qualmin=std::min(qual1,qual2);
315 if (normal*n1n4<0.0001) nqual1=0.;
324 if (normal2*n2n3<0.0001) nqual2=0.;
325 double nqualmin=std::min(nqual1,nqual2);
326 if (nqualmin>qualmin)
352 for (
int i=0;i<nb_tri;i++)
375 double u2=noeud1->
get_u()+du;
376 double v2=noeud1->
get_v()+dv;
379 u2=noeud2->
get_u()+du;
380 v2=noeud2->
get_v()+dv;
387 double ddeb=
sqrt((u1-uopt)*(u1-uopt)+(v1-vopt)*(v1-vopt));
390 double qual=qual_dep;
391 double testu[8]={1.,-1.,0.,0.,0.707106781,-0.707106781,-0.707106781,0.707106781};
392 double testv[8]={0.,0.,1.,-1.,0.707106781,0.707106781,-0.707106781,-0.707106781};
398 for (
int nb_essai=0;nb_essai<8;nb_essai++)
402 uv[0]=uu+d*testu[nb_essai]-du;
403 uv[1]=vv+d*testv[nb_essai]-dv;
406 if (!((valide1) && (valide2) ))
break;
409 for (
int i=0;i<nb_tri;i++)
418 if (no1==mg_noeud) xyz1=xyz;
419 if (no2==mg_noeud) xyz2=xyz;
420 if (no3==mg_noeud) xyz3=xyz;
430 if (normal*n1n2<0.0001) qualtmp=0.;
431 if (qualtmp<qual1) qual1=qualtmp;
442 if (qualcoq<qual+0.0001) alpha=alpha-0.1;
494 double crit[3],u[3],v[3],x[3],y[3],z[3];
495 int ierr=
bouge_point(mgface,no[0],crit[0],u[0],v[0],x[0],y[0],z[0]);
496 if (ierr==0) crit[0]=0.;
497 ierr=
bouge_point(mgface,no[1],crit[1],u[1],v[1],x[1],y[1],z[1]);
498 if (ierr==0) crit[1]=0.;
499 ierr=
bouge_point(mgface,no[2],crit[2],u[2],v[2],x[2],y[2],z[2]);
500 if (ierr==0) crit[2]=0.;
501 double critopt=std::max(crit[0],crit[1]);
502 critopt=std::max(critopt,crit[2]);
506 if (critopt==crit[0]) num=0;
507 if (critopt==crit[1]) num=1;
508 if (critopt==crit[2]) num=2;
518 for (
int i=0;i<nb_tri;i++)
542 double crit1,crit2,crit3;
549 double maxcrit=std::max(ierr1*crit1,ierr2*crit2);
550 maxcrit=std::max(maxcrit,ierr3*crit3);
553 if (maxcrit>(*tri)->get_qualite())
555 if (maxcrit==ierr1*crit1) {tab=tab1;autretri=autretri1;}
556 if (maxcrit==ierr2*crit2) {tab=tab2;autretri=autretri2;}
557 if (maxcrit==ierr3*crit3) {tab=tab3;autretri=autretri3;}