Bonjour
Plutôt que de faire un sujet d'analyse fonctionnelle, j'ai regardé.
Les coefficients sont importants, mais les points appartiennent bien
à l'ellipse.
Le problème a lieu lors du cast (pas casting à Cannes) de l'ellipse en un chemin.
Grosso modo, on fait varier l'angle de 0 à 360 et on met les points bout à bout
selon un guide et à la fin on donne un beau chemin. Pour l'ellipse avec ce
chemin on raccorde (chemin cyclique) et il m'est avis que le problème
a lieu à ce moment, un pb de tangente qui prend le dessus sur le reste
et te crée une petite excroissance à ton ellipse.
Je ne veux pas faire tomber le serveur de Gaëtan, il est possible
d'augmenter le paramètre ellipsenodesnumberfactor. Voici le code.
Si tu agrandis tu verras qu'à cet endroit ce n'est pas extraordinaire non plus,
la faute à la tangente...
Code : Tout sélectionner
import geometry;
size(5cm,0);
defaultpen(fontsize(10pt));
real[] tab={0,270,-1,39,-246,88,-291,142,-342,200,-398,261,-463};
real Phi=tab[0]; // la première valeur correspond à la latitude géographique
currentcoordsys=cartesiansystem((tab[1],tab[2]), i=(1,0), j=(0,1));
point o=(tab[1],tab[2]),
p1=(tab[3],tab[4]),
p2=(tab[5],tab[6]),
p3=(tab[7],tab[8]),
p4=(tab[9],tab[10]),
p5=(tab[11],tab[12]);
real ech=1;
ellipsenodesnumberfactor=2500;
conic co=ellipse(ech*p1,ech*p2,ech*p3,ech*p4,ech*p5);
draw(co);
//dot((path)co);
dot(ech*p1, green);
dot(ech*p2, green);
dot(ech*p3, green);
dot(ech*p4, green);
dot(ech*p5, green);
//dot(o,blue);
bqe bqeco=bqe(p1,p2,p3,p4,p5);
int i=-1;
for(real k: bqeco.a) label("$a["+string(++i)+"]="+string(k)+"$",1.02truepoint(S));
label("dr\^ole d'"+conictype(bqeco),truepoint(N));
real[] v=bqeco.a;
for(int j=0;j<5;++j)
{
real x=tab[2*j+3];
real y=tab[2*j+4];
real s=v[0]*x*x+v[1]*x*y+v[2]*y*y+v[3]*x+v[4]*y+v[5];
write(s);
}
O.G.