Page 1 sur 3

Distance entre un point et une conique

Posté : ven. 7 mai 2010, 14:06
par Hippyom
Bonjour,
je souhaite déterminer la distance entre une conique (tracée à partir de 5 points en passant par la commande "conic" de geometry.asy) et un point P que j'ai défini comme l'origine de mon repère.
Plus précisément je souhaite trouver le point de la conique qui est le plus proche du point P.
Je n'ai trouvé dans l'extension geometry que la commande : "distance(point, line)" (qui ne fonctionne donc pas dans mon cas :? ) et je n'ai rien trouvé dans la doc. officielle d'Asymptote. Faut-il alors que je passe par l'équation de la conique ?
Si quelqu'un sait comment faire, merci. ;)

Re: Distance entre un point et une conique

Posté : ven. 7 mai 2010, 15:41
par GM
Hippyom a écrit :Bonjour,
je souhaite déterminer la distance entre une conique (tracée à partir de 5 points en passant par la commande "conic" de geometry.asy) et un point P que j'ai défini comme l'origine de mon repère.
Plus précisément je souhaite trouver le point de la conique qui est le plus proche du point P.
Je n'ai trouvé dans l'extension geometry que la commande : "distance(point, line)" (qui ne fonctionne donc pas dans mon cas :? ) et je n'ai rien trouvé dans la doc. officielle d'Asymptote. Faut-il alors que je passe par l'équation de la conique ?
Si quelqu'un sait comment faire, merci. ;)

Je ne sais pas faire dans l'instant mais c'est un sujet intéressant.
Pour n'importe quel cas de conique ? Ou pour une conique d'un type donné ?

Re: Distance entre un point et une conique

Posté : ven. 7 mai 2010, 16:18
par Hippyom
Et bien je pensais obtenir une hyperbole mais cela n'y ressemble pas vraiment.
Les points sont issus d'un tracé effectué à la main donc ne sont pas précis (et d'ailleurs je ne suis même pas sûr que la courbe soit exactement une conique à la base).
Mais j'obtiens le tracé suivant :
conique_point.png
conique_point.png (8.54 Kio) Vu 8324 fois

Re: Distance entre un point et une conique

Posté : ven. 7 mai 2010, 16:32
par Hippyom
C'est quand même très bizarre comme courbe... :?

Re: Distance entre un point et une conique

Posté : ven. 7 mai 2010, 20:53
par OG
Bonsoir

Oui la courbe est bizarre. Pourrais-tu donner le code qui mène à ce dessin ?
Comme tes points sont lus à la main/avec les yeux, quel est l'origine du problème ?

Enfin pour la distance d'un point à une conique, ce n'est pas implémenté dans geometry.asy.
Les coniques est vraiment le sujet que je ne pratique plus depuis des lustres, mais déjà
y-a-t-il une méthode mathématique (même si elle mène à la résolution d'équation
polynomiale de degré élevé) qui fasse le boulot ?

O.G. nul en conique

Re: Distance entre un point et une conique

Posté : ven. 7 mai 2010, 21:54
par GM
Je voulais bien aider... mais il faut être sûr de chercher dans la bonne direction.
Et là, avec ta figure... on est plus que tenté d'attendre que tu nous précises ton code... car pour une conique, c'est original :mrgreen:

Tu as cherché à pousser l'extension de Philippe dans ses retranchements ? :lol:

Une suggestion supplémentaire :

Code : Tout sélectionner

write(conictype( LaBqeDeTaDroleDeConique));
Cela devrait renvoyer "ellipse", "parabola", "hyperbola" ou "degenerated".

Pour ceux qui liront sans comprendre bqe :
bqe signifie 'bivariate quartic equation, c'est à la fois :
  • un type dont la structure est :

    Code : Tout sélectionner

    coordsys coordsys
    real[] a
    avec a tableau des 6 coefficients tels que :
    a[0]x^2+a[1]xy+a[2]y^2+a[3]x+a[4]y+a[0]=0
  • une fonction :

    Code : Tout sélectionner

    bqe(coordsys R=currentcoordsys,real a,real b,real c,real d,real e,real f)
    qui retourne un objet de type bqe représentant l'équation
    ax^2 + bxy + cy^2 + dx + ey + f = 0, relativement au repère R.

Re: Distance entre un point et une conique

Posté : sam. 8 mai 2010, 09:27
par Francky
Une piste à suivre :
Pour une conique : ax^2+2bxy+cy^2+2dx+2ey+f=0~, (attention, il y a volontairement des 2 ici !)
l'équation de la tangente en (x_0;y_0) est : axx_0+b(xy_0+yx_0)+cyy_0+d(x+x_0)+e(y+y_0)+f=0 EDIT : corrigé
dont on trouve le vecteur normal \vect{N}(x_0;y_0)=(ax_0+by_0+d;bx_0+cy_0+e).

Le point P(p;q) le plus proche de ta conique est M(x;y) qui vérifie le système d'équation :
1) M est sur ta conique : axx_0+b(xy_0+yx_0)+cyy_0+d(x+x_0)+e(y+y_0)+f=0
2) \vect{PM} est colinéaire à \vect{N} : (x-p)(bx+cy+e)=(y-q)(ax+by+d)
avec XCAS, ça doit le faire easy.

Tu trouves en fait les extrema locaux, a priori deux solutions,
une simple comparaison et c'est fini.
Je vais essayer de mon côté.

Re: Distance entre un point et une conique

Posté : sam. 8 mai 2010, 10:09
par GM
Francky a écrit :l'équation de la tangente en (x_0;y_0) est : axx_0+b(xx_0+yy_0)+d(x+x_0)+e(y+y_0)+f=0 (à vérifier, c'est de mémoire)

Ce ne serait pas plutôt l'équation suivante ?
\boxed{axx_0+b(xy_0+x_0y)+cyy_0+d(x+x_0)+e(y+y_0)+f=0}

Attention : un terme en plus... mais aussi une inversion de lettres.

... et un vecteur normal à la tangente à la conique en M(x_0 ; y_0) est
\boxed{\vect{n}\left(ax_0+by_0+d \ ; \ bx_0+cy_0+e\right)}


Pour l'exemple suivant, je n'ai pas utilisé la fonction tangente de l'extension geometry, j'ai demandé le tracé de

Code : Tout sélectionner

line(  a*x0+b*y0+d  ,  b*x0+c*y0+e  ,  d*x0+e*y0+f  )

Figure asymptote 157b6e927c3da2aeba1ea8eda465dda4
*** 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(200);
  3. show(currentcoordsys,dotpen=invisible);
  4. point pA=(4,0), pB=(0,2), pC=(-4,0), pD=(0,-2), pE=(3,1);
  5. conic co=conic(pA,pB,pC,pD,pE);
  6. bqe bqec=equation(co);
  7.  
  8. real x0=pB.x,
  9. y0=pB.y;
  10. real a=bqec.a[0],
  11. b=bqec.a[1]/2,
  12. c=bqec.a[2],
  13. d=bqec.a[3]/2,
  14. e=bqec.a[4]/2,
  15. f=bqec.a[5];
  16.  
  17. dot(pA^^pB^^pC^^pD^^pE,5bp+blue);
  18. draw(co,.8bp+.8green);
  19. draw(line(a*x0+b*y0+d,b*x0+c*y0+e,d*x0+e*y0+f),red);
  20.  
  21. addMargins(20,20);

Re: Distance entre un point et une conique

Posté : lun. 10 mai 2010, 09:07
par Hippyom
Désolé d'avoir mis 2 jours à répondre.
Tout d'abord voici le code correspondant au dessin :

Code : Tout sélectionner

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

size(5cm,0);

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

real[] tab=fich; // On stocke l'ensemble des valeurs dans le tableau tab
real Phi=tab[0]; // la première valeur correspond à la latitude géographique

coordsys R=cartesiansystem((tab[1],tab[2]), i=(1,0), j=(0,1));

point o=point(R,(tab[1],tab[2])/R);
point p1=point(R,(tab[3],tab[4])/R);
point p2=point(R,(tab[5],tab[6])/R);
point p3=point(R,(tab[7],tab[8])/R);
point p4=point(R,(tab[9],tab[10])/R);
point p5=point(R,(tab[11],tab[12])/R);

conic co=conic (p1,p2,p3,p4,p5);
draw(co);
dot(p1, green);
dot(p2, green);
dot(p3, green);
dot(p4, green);
dot(p5, green);
dot(o,blue);

Ensuite, pour répondre à OG, ces points sont issus du relevé effectué sur un cadran solaire sur une journée. Ce tracé est une ellipse, une hyperbole, une parabole ou un cercle notamment selon le lieu.
J'ai rentré manuellement les coordonnées des points (en nombre de pts) dans un fichier.txt que je lis via la commande input car c'est le seul moyen que j'ai trouvé pour récupérer ces points depuis l'image scannée du tracé. J'ai préalablement essayé pstoedit pour récupérer directement les coordonnées des points mais comme ils n'étaient justement pas considérés comme des points par Asymptote c'était assez compliqué.

GM a écrit :Une suggestion supplémentaire :

Code : Tout sélectionner

write(conictype( LaBqeDeTaDroleDeConique));
Cela devrait renvoyer "ellipse", "parabola", "hyperbola" ou "degenerated".

Apparement c'est une ellipse :D

En tout cas merci pour vos réponses, je vais tâcher d'utiliser vos indications à bon escient et me pencher sur l'équation de la conique ;)

Re: Distance entre un point et une conique

Posté : lun. 10 mai 2010, 11:30
par GM
Hippyom a écrit :Tout d'abord voici le code correspondant au dessin.

Oui mais ce que l'on aimerait, ce sont les 5 pairs... qui donnent cette jolie "ellip... atatoïde". :mrgreen:.