55 return get_angle_par_noeud<MG_NOEUD*>(noeud1,noeud2,noeud3,noeud4,noeud5,noeud6);
119 double det=
mat.get_determinant();
125 proj[0]=(1.-xsi-eta)*noeud1->
get_x()+xsi*noeud2->
get_x()+eta*noeud3->
get_x();
126 proj[1]=(1.-xsi-eta)*noeud1->
get_y()+xsi*noeud2->
get_y()+eta*noeud3->
get_y();
127 proj[2]=(1.-xsi-eta)*noeud1->
get_z()+xsi*noeud2->
get_z()+eta*noeud3->
get_z();
131 double ps=n1n4*n1nproj;
136 double angle=
acos(ps);
137 if ((xsi<0.) || (eta<0.) ) angle=angle+M_PI/2.;
138 if (psi<0.) angle=2*M_PI-angle;
149 liste_intersection.
vide();
164 int nb_liste=liste.
get_nb();
165 for (
int i=0;i<nb_liste;i++)
190 int nb_inter=liste_intersection.
get_nb();
254 double lg_tet_ideal=fabs(vec*da*ft->
get_ifail()*
sqrt(3./2.));
255 double vol_ideal=
sqrt(2.)/12.*lg_tet_ideal*lg_tet_ideal*lg_tet_ideal;
256 if (vol<0.1*vol_ideal)
258 if ((vol1>0.) && (vol1<0.1*vol_ideal))
260 if ((vol2>0.) && (vol2<0.1*vol_ideal))
262 if ((vol3>0.) && (vol3<0.1*vol_ideal))
264 if ((vol4>0.) && (vol4<0.1*vol_ideal))
311 if (triangle!=NULL)
return triangle;
328 if (segment!=NULL)
return NULL;
368 double volume=pvec*da;
369 volume=fabs(volume)/3.;
428 double xyzg[3]={0.333333333333*(xyz1[0]+xyz2[0]+xyz3[0]),0.333333333333*(xyz1[1]+xyz2[1]+xyz3[1]),0.333333333333*(xyz1[2]+xyz2[2]+xyz3[2])};
432 xyz4[0]=xyzg[0]+hauteur*normal.
get_x();
433 xyz4[1]=xyzg[1]+hauteur*normal.
get_y();
434 xyz4[2]=xyzg[2]+hauteur*normal.
get_z();
441 double l=0.333333333333333*(l1+l2+l3);
443 longueur_desiree=longueur_desiree/ft->
get_ifail();
446 OT_VECTEUR_3D hauteurajustee(xyzg[0]-xyz4[0],xyzg[1]-xyz4[1],xyzg[2]-xyz4[2]);
452 int nb_liste=liste_front.
get_nb();
455 for (
int i=0;i<nb_liste;i++)
458 for (
int j=0;j<3;j++)
466 OT_VECTEUR_3D vec(xyz_tmp[0]-xyzg[0],xyz_tmp[1]-xyzg[1],xyz_tmp[2]-xyzg[2]);
467 double eps=0.333333333333333*(vec.
diff()+n1n2.
diff()+n1n3.diff());
469 if (vec*normalnonnorme<eps)
continue;
480 if (dismin<hauteur) liste_front_proche.
ajouter(ft2);
486 if (dis2<longueur_desiree*1.5)
489 if (noeudref!=noeud3)
495 int nb_proche=liste_front_proche.
get_nb();
496 int nb_cas=liste_cas.size();
499 for (
int i=0;i<nb_proche;i++)
503 for (
int j=0;j<nb_cas;j++)
505 MG_NOEUD* casnoeud=liste_cas[j]->mgnoeud;
516 if (noeudtmp!=noeud3) liste_noeud.
ajouter(noeudtmp);
520 if (noeudtmp!=noeud3) liste_noeud.
ajouter(noeudtmp);
524 if (noeudtmp!=noeud3) liste_noeud.
ajouter(noeudtmp);
531 liste_noeud.
ajouter(nouveau_noeud);
553 if ((eta>-eps) && (xsi>-eps) && (eta+xsi<1.0+eps))
681 int nb_liste1=liste_de_front.
get_nb();
682 for (
int i=0;i<nb_liste1;i++)
683 if (liste_de_front.
get(i)!=NULL)
685 int nb_liste2=liste_de_front2.
get_nb();
686 for (
int i=0;i<nb_liste2;i++)
694 for (
int k=0;k<4;k++)
707 for (
int i=0;i<nb_tet;i++)
768 vol=0.;tab[0]=0;tab[1]=0;tab[2]=0;tab[3]=0;
769 LISTE_MG_TETRA::iterator it;
773 double qual=
OPERATEUR::qualite_tetra(tet->get_noeud1()->get_coord(),tet->get_noeud2()->get_coord(),tet->get_noeud3()->get_coord(),tet->get_noeud4()->get_coord());
774 if (qual>=borne3) tab[3]++;
775 else if (qual>=borne2) tab[2]++;
776 else if (qual>=borne1) tab[1]++;
784 std::map<long,long,std::less<long> > lstcorrespondancenoeud;
785 int nbtet=lsttet->
get_nb();
786 for (
int i=0;i<nbtet;i++)
794 xyz[0]=(xyz1[0]+xyz2[0]+xyz3[0]+xyz4[0])*0.25;
795 xyz[1]=(xyz1[1]+xyz2[1]+xyz3[1]+xyz4[1])*0.25;
796 xyz[2]=(xyz1[2]+xyz2[2]+xyz3[2]+xyz4[2])*0.25;
806 rayonrecherche=rayonrecherche*1.1;
820 int nbtrouve=liste_trouvee.
get_nb();
821 for (
int j=0;j<nbtrouve;j++)
823 if ((noeudref1!=NULL) && (noeudref2!=NULL) && (noeudref3!=NULL) && (noeudref4!=NULL) )
break;
832 for (
int k=0;k<nb;k++)
839 noeudref1=lstnoeud.
get(k);
848 for (
int k=0;k<nb;k++)
855 noeudref2=lstnoeud.
get(k);
864 for (
int k=0;k<nb;k++)
871 noeudref3=lstnoeud.
get(k);
880 for (
int k=0;k<nb;k++)
887 noeudref4=lstnoeud.
get(k);
901 lstcorrespondancenoeud.insert(tmp);
911 lstcorrespondancenoeud.insert(tmp);
921 lstcorrespondancenoeud.insert(tmp);
931 lstcorrespondancenoeud.insert(tmp);
1046 int nbtri=lsttri->
get_nb();
1047 for (
int i=0;i<nbtri;i++)
1054 xyz[0]=(xyz1[0]+xyz2[0]+xyz3[0])/3.;
1055 xyz[1]=(xyz1[1]+xyz2[1]+xyz3[1])/3.;
1056 xyz[2]=(xyz1[2]+xyz2[2]+xyz3[2])/3.;
1064 rayonrecherche=rayonrecherche*1.1;
1069 int nbtrouve=liste_trouvee.
get_nb();
1070 for (
int j=0;j<nbtrouve;j++)
1077 int nb=lstnoeud.
get_nb();
1078 for (
int k=0;k<nb;k++)
1085 noeudref1=lstnoeud.
get(k);
1091 for (
int k=0;k<nb;k++)
1098 noeudref2=lstnoeud.
get(k);
1104 for (
int k=0;k<nb;k++)
1111 noeudref3=lstnoeud.
get(k);
1118 if (noeudref1==NULL)
1123 if (noeudref2==NULL)
1128 if (noeudref3==NULL)