Page 2 sur 3

Re: Distance entre un point et une conique

Posté : lun. 10 mai 2010, 12:18
par Hippyom
O(270, -1)
P1(39, -246), P2(88, -291), P3(142, -342), P4(200, -398), P5(261, -463)
Voici les coordonnées des points dans le repère par défaut d'Asymptote. Ce sont les valeurs qui sont contenues dans le fichier.txt.

Re: Distance entre un point et une conique

Posté : lun. 10 mai 2010, 12:28
par Hippyom
Euh une petite question pour être sûr d'avoir bien compris ce que vous me conseillez :
il faut que je teste différentes valeurs pour le point M(x_0,y_0) jusqu'à obtenir le vecteur normal à la conique \vect{N}(x,y) passant par M, colinéaire à \vect{PM} ?

Re: Distance entre un point et une conique

Posté : lun. 10 mai 2010, 13:06
par GM
Hippyom a écrit :O(270, -1)
P1(39, -246), P2(88, -291), P3(142, -342), P4(200, -398), P5(261, -463)
Voici les coordonnées des points dans le repère par défaut d'Asymptote. Ce sont les valeurs qui sont contenues dans le fichier.txt.


Figure asymptote 6571edac0b64cc01f4f9657b4a696242
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import geometry;
  2. size(5cm,0);
  3. defaultpen(fontsize(10pt));
  4.  
  5. real[] tab={0,270,-1,39,-246,88,-291,142,-342,200,-398,261,-463};
  6. real Phi=tab[0]; // la première valeur correspond à la latitude géographique
  7. currentcoordsys=cartesiansystem((tab[1],tab[2]), i=(1,0), j=(0,1));
  8. point o=(tab[1],tab[2]),
  9. p1=(tab[3],tab[4]),
  10. p2=(tab[5],tab[6]),
  11. p3=(tab[7],tab[8]),
  12. p4=(tab[9],tab[10]),
  13. p5=(tab[11],tab[12]);
  14. conic co=conic (p1,p2,p3,p4,p5);
  15.  
  16. draw(co);
  17. dot(p1, green);
  18. dot(p2, green);
  19. dot(p3, green);
  20. dot(p4, green);
  21. dot(p5, green);
  22. //dot(o,blue);
  23. bqe bqeco=bqe(p1,p2,p3,p4,p5);
  24.  
  25. int i=-1;
  26. for(real k: bqeco.a) label("$a["+string(++i)+"]="+string(k)+"$",1.02truepoint(S));
  27. label("dr\^ole d'"+conictype(bqeco),truepoint(N));


Bon bein... effectivement... c'est un peu perturbant. :lol:

Re: Distance entre un point et une conique

Posté : lun. 10 mai 2010, 13:08
par GM
Hippyom a écrit :il faut que je ...

que tu règles ton problème de la forme obtenue... avant de chercher à calculer une quelconque distance.
Philippe devrait réapparaitre tôt ou tard... et être intéressé par ton problème.

Re: Distance entre un point et une conique

Posté : lun. 10 mai 2010, 13:17
par Hippyom
Et bien à ce propos est-ce si anormal d'obtenir une forme de ce type ? ou bien est-ce qu'une conique tracée à partir de 5 points quelconques peut toujours avoir une forme conventionnelle du type parabole, ellipse, hyperbole ou dégénérée ?

Re: Distance entre un point et une conique

Posté : lun. 10 mai 2010, 19:50
par GM
Hippyom a écrit :Et bien à ce propos est-ce si anormal ...

Je crois que c'est évident qu'il y a un problème (une conséquence d'un problème de précision de calcul ?)... car la courbe ne passe même pas par l'un des points.

Re: Distance entre un point et une conique

Posté : lun. 10 mai 2010, 20:32
par Hippyom
Euh oui c'est vrai qu'il y a un problème...
Mais il ne faut pas oublier que j'utilise des coordonnées provenant d'un tracé effectué à la main avec les imprécisions que cela comporte. Je me demande donc si l'erreur vient d'ici ?
Mais ce qui m'étonne est que pour d'autres essais que j'ai effectué avec des points différents, même choisis aléatoirement, je n'ai pas obtenu de forme aussi étrange.

Re: Distance entre un point et une conique

Posté : mar. 11 mai 2010, 21:24
par OG
bonsoir

J'ai tracé les points et la régression linéaire des points. Ils ne sont pas alignés
mais tout de même, l'erreur est de l'ordre de 1%.
Je n'ai pas le temps d'aller plus loin ce soir. Il faudrait vérifier
1) avec les coefficients donnés par asymptote tu obtiens une conique,
ces points sont-ils sur cette conique ?
2) si 1) est ok, c'est au niveau du tracé et certainement les grands coefficients
de ta conique incommodent geometry.asy. Ce genre d'exemple n'a pas été prévu,
il faut fouiller dans le code de geometry.asy
si 1) n'est pas ok, cela peut être une instabilité numérique (parce que tes points
sont presque alignés) et là c'est plus compliqué.
Ou alors un gros bug dans la résolution.
La méthode utilisée est celle de la résultante et in fine une résolution numérique
d'un polynôme de degré 4 (ou autre). Ce genre de problème doit être implémenté dans
Maple ou Mathematica en version calcul formel, voire du point purement numérique
facilement (ou presque) en Scilab ou Matlab.

D'autre part vu que tes données sont lues/acquises elles sont entachées d'une erreur.
Il serait intéressant de voir le conditionnement de ton problème, l'impact d'une modification
de l'ordre de 0,2 ou 0,4 ou moins des données sur les coefficients de ta conique.
Ça ne devrait pas beaucoup modifier la courbe au niveau de tes points mais au delà
cela peut être très sensible.

O.G.

Re: Distance entre un point et une conique

Posté : mer. 12 mai 2010, 11:05
par Hippyom
Bonjour,
j'ai constaté qu'en demandant à Asymptote de tracer la courbe en fonction des coefficients donnés par bqe, les coefficients arrondis au millième ne suffisent apparemment pas. :?
erreur_ellipse.png
erreur_ellipse.png (7.95 Kio) Vu 7655 fois

Pour obtenir la courbe j'ai donc rentré les coefficients arrondis à 12 chiffres et la courbe tracée est alors identique à la précédente et les points placés également de façon identique :
drole_de_conique.png
drole_de_conique.png (6.22 Kio) Vu 7655 fois

le code utilisé est celui-ci :

Code : Tout sélectionner

import geometry;
input("parametres_du_cadran.txt", check=true, comment="#");

file fich=input("parametres_du_cadran.txt");

real[] tab=fich;
//real a=-1, b=-2.093, c=-1.098, d=-981.888, e=-1029.255, f=-241284.536;
real a=-1, b=-2.09298184242549, c=-1.09764082083416, d=-981.888108727323, e=-1029.2554303887, f=-241284.535878697;
coordsys R=cartesiansystem((tab[1],tab[2]), i=(1,0), j=(0,1));
point[] p;

bqe eq=bqe(R,a,b,c,d,e,f);
conic co=conic(eq);
draw(co);
write(conictype(eq));

for(int k=1; k<6; ++k){
   p[k]=(tab[2*k+1],tab[2*k+2]);
   p[k]=point(R, p[k]/R);
   dot(p[k]);
}

shipout(bbox(4mm,invisible));


Je vais voir quel résultat pourrait avoir une légère modification des coefficients comme tu le suggères OG.
J'ai aussi la possibilité d'utiliser les données de quelques autres points du tracé initial je vais faire d'autres essais.

Merci encore de vous intéresser à mon problème :)

Re: Distance entre un point et une conique

Posté : mer. 12 mai 2010, 12:24
par GM
Hippyom a écrit :Je vais voir quel résultat pourrait avoir une légère modification des coefficients comme tu le suggères OG.

Si on a trois ou quatre points alignés ou quasi alignés... ok, il y a un risque d'avoir une conique dégénérée... mais pas en forme d'aiguille à coudre. :mrgreen:

Je ne crois pas que changer tes valeurs est la solution car :
1. si 3 à 3, ils ne sont pas alignés, on doit avoir une conique non dégénérée ;
2. il y a un problème évident du code ... CAR la courbe ne passe pas par l'un des points.

Je n'ai pas le temps de regarder le code de Philippe en ce moment... et je croise les doigts pour qu'il réapparaisse (disparu depuis au moins deux semaines) car c'est lui qui connait le mieux les limites de son code.