56 double h=std::min(facteur_eps,facteur_dist);
80 int nb_liste_trouvee=liste_trouvee.
get_nb();
81 for (
int i=0;i<nb_liste_trouvee;i++)
90 double px=(u2-u1)*(u-u1)+(v2-v1)*(v-v1);
91 double py=(u1-u2)*(u-u2)+(v1-v2)*(v-v2);
92 double eps=0.0001*(u1-u2)*(u1-u2)+0.0001*(v1-v2)*(v1-v2);
94 if ((px>(-eps)) && (py>(-eps)))
96 double det=(u1-u2)*(u1-u2)+(v1-v2)*(v1-v2);
97 double ui=(u1*(v2-v1)*(v2-v1)+(u1-u2)*(v2-v1)*(v1-v)+u*(u1-u2)*(u1-u2))/det;
98 double vi=(v1*(u1-u2)*(u1-u2)+(u1-u2)*(v1-v2)*(u-u1)+v*(v1-v2)*(v1-v2))/det;
101 else distance=0.5*(
calcule_distance(u,v,u1,v1,du,dv)+
calcule_distance(u,v,u2,v2,du,dv));
102 std::pair<const double,MG_SEGMENT*> tmp(distance,segment);
103 frontiere_recherchee.insert(tmp);
106 double numo=0.,deno=0.;
108 for (FRONTIERE_INFLUENTE::iterator j=frontiere_recherchee.begin();j!=frontiere_recherchee.end();j++)
111 if (((*j).first<dist_reference) && (nombre<4))
128 dens=0.5*(dens1+dens2);
150 double longueur_calculee=0.;
164 double param_ti[2]={ui-du,vi-dv};
173 double t=0.7886751345*ti+0.2113248654*tii;
174 double u=u1+t*(u2-u1);
175 double v=v1+t*(v2-v1);
176 double param_integration1[2]={u-du,v-dv};
179 longueur_calculee=longueur_calculee+0.5*(tii-ti)*
sqrt(E*dui*dui+2*F*dui*dvi+G*dvi*dvi);
180 t=0.7886751345*tii+0.2113248654*ti;
183 double param_integration2[2]={u-du,v-dv};
185 longueur_calculee=longueur_calculee+0.5*(tii-ti)*
sqrt(E*dui*dui+2*F*dui*dvi+G*dvi*dvi);
189 return longueur_calculee;
197 uv[num_param]=uv[num_param]+1e-6;
198 double taille[9],taille_eps[9];
201 resultat[0]=(taille_eps[0]-taille[0])/1e-6;
202 resultat[1]=(taille_eps[1]-taille[1])/1e-6;
203 resultat[2]=(taille_eps[2]-taille[2])/1e-6;
204 resultat[3]=(taille_eps[3]-taille[3])/1e-6;
205 resultat[4]=(taille_eps[4]-taille[4])/1e-6;
206 resultat[5]=(taille_eps[5]-taille[5])/1e-6;
207 resultat[6]=(taille_eps[6]-taille[6])/1e-6;
208 resultat[7]=(taille_eps[7]-taille[7])/1e-6;
209 resultat[8]=(taille_eps[8]-taille[8])/1e-6;
214 const double precision = 1e-13;
217 double lambda1,lambda2;
223 double a = metrique_depart[0];
224 double b = metrique_depart[1];
225 double c = metrique_depart[2];
226 double d = metrique_depart[3];
228 double coef1 = (
a + d) * (
a + d);
229 double coef2 = 4.0 * (
a*d - b*c);
230 double discriminant = coef1 - coef2;
244 if ( discriminant > precision * ( fabs(coef1) + fabs(coef2) ) )
246 discriminant =
sqrt ( discriminant );
247 lambda1 = (
a + d - discriminant ) * 0.5;
248 lambda2 = (
a + d + discriminant ) * 0.5;
251 if ( fabs(v1[1]) <= precision * ( fabs(lambda1) + fabs(
a) ) )
256 double normV1 = 1.0 /
sqrt ( v1[0]*v1[0] + v1[1]*v1[1] );
257 v1[0] = v1[0] * normV1;
258 v1[1] = v1[1] * normV1;
261 if ( fabs(v2[1]) <= precision * ( fabs(lambda2) + fabs(
a) ) )
266 double normV2 = 1.0 /
sqrt ( v2[0]*v2[0] + v2[1]*v2[1] );
267 v2[0] = v2[0] * normV2;
268 v2[1] = v2[1] * normV2;
270 else if ( fabs(discriminant) <= precision*( fabs(coef1) + fabs(coef2) ) )
272 if ( fabs(b) + fabs(c) > precision * ( fabs(
a) + fabs(d) ) )
274 lambda1 = (
a + d ) * 0.5;
276 if ( fabs(b) > fabs(c) )
279 v1[1] = - (
a - d ) * v1[0] / ( 2.0 * b );
284 v1[0] = (
a - d ) * v1[1] / ( 2.0 * c );
286 double norm = 1.0 /
sqrt ( v1[0]*v1[0] + v1[1]*v1[1] );
287 v1[0] = v1[0] * norm;
288 v1[1] = v1[1] * norm;
316 if ( fabs(b) > fabs(c) )
332 metrique_decompose[0]=lambda1;
333 metrique_decompose[1]=v1[0];
334 metrique_decompose[2]=v1[1];
335 metrique_decompose[3]=lambda2;
336 metrique_decompose[4]=v2[0];
337 metrique_decompose[5]=v2[1];