IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

Distance d'un point à un polygone convexe


Sujet :

Mathématiques

  1. #1
    Membre régulier Avatar de sly078
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 116
    Points
    116
    Par défaut Distance d'un point à un polygone convexe
    Bonjour,

    Dans le cadre du développement d'un programme en JAVA je cherche la distance dans le plan entre un point (appelons le extérieur) et un polygone convexe quelconque (pas forcément régulier quoi) représenté par un tableau de points. Je cherche donc la distance min entre le point et le polygone.

    La solution que j'applique pour l'instant c'est de calculer la distance du point à chaque côté du polygone (cad à chaque couple de points formant un coté). Puis de prendre le minimum.

    Je me demande s'il n'existe pas une méthode plus rapide (en éliminant par exemple certains côtés pour calculer un moins grand nombre de distances). Une solution possible est d'utiliser un point intérieur du polygone (par exemple le centre). Le côté du polygone le plus proche du point extérieur est celui qui intersecte le segment entre le point extérieur et le point intérieur. Il faut donc tester l'intersection entre le segment formé par ces deux points et chaque côté. Puis calculer la distance entre le point et le côté trouvé. Mais cela est-il plus rapide que la première solution ?

    J'espère ne pas être passé à côté de solutions sur le net ou sur ce forum... (encore que, si quelqu'un est moins myope que moi il pourra simplement me l'indiquer ^^)

    Merci de vos réponses,

    Sly

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Points : 419
    Points
    419
    Par défaut
    Salut,

    La première solution ne me semble pas correcte.

    Soit un côté [AB] donné, et soit I l'intersection entre (AB) et la perpendiculaire à (AB) passant par le point extérieur E.

    Si I appartient à [AB], alors ce point est le point du segment le plus proche de E.
    Dans le cas contraire, c'est l'extrémité de [AB] la plus proche de I qui est aussi la plus proche de E.

    Pour ce qui est de la seconde, je pense que ça ne marchera pas dans tous les cas (le segment contenant le point le plus proche peut ne pas intersecter le segment rejoignant lepoint intérieur et le point extérieur).

  3. #3
    Membre régulier Avatar de sly078
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 116
    Points
    116
    Par défaut
    Salut Fremen, merci d'avoir répondu.

    J'aurai dû préciser comment je calculais la distance du point à un des côtés. Pour reprendre ta notation, dans le cas où I appartient à [AB] la distance que je garde est bien IE. Dans le cas contraire, la distance est AE ou BE comme tu l'as dit. Je prends donc bien en compte ce que tu dis.

    Pour la seconde solution, étant dans le cas d'un polygone convexe, je pense justement que cela marche tout le temps. Mais je n'ai rien qui le prouve à part quelques dessins et mon intuition... Si jamais tu as un exemple contraire, cela m'intéresse

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Points : 419
    Points
    419
    Par défaut
    Citation Envoyé par sly078 Voir le message
    Si jamais tu as un exemple contraire, cela m'intéresse
    Oui, en voilà un :
    Images attachées Images attachées  

  5. #5
    Membre régulier Avatar de sly078
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 116
    Points
    116
    Par défaut
    Effectivement ça coince...

    Aucune idée d'une autre manière de faire ?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    tu calcules la distance a chaque sommet du polygone. Tu prends la plus courte.
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Points : 419
    Points
    419
    Par défaut
    Mais ce n'est pas bon non plus Souviron. Dans l'exemple que j'ai donné, le point le plus proche n'est pas un sommet.

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    tout dépend de ce qu'on veut

    Si c'est une estimation de la distance , cela suffit

    Si par contre on veut la vraie, il faut appliquer au côté trouvé par cet algo le tien
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  9. #9
    Membre régulier Avatar de sly078
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 116
    Points
    116
    Par défaut
    Oui, une autre solution incorrecte à laquelle j'ai pensé s'inspire de la distance avec les sommets. On pourrait penser que le sommet le plus proche de E appartient au côté le plus proche de E mais ce n'est pas toujours le cas non plus.

    Maintenant il y a peut être une autre possibilité : le sommet A le plus proche de E appartient au côté le plus proche de E OU le seul côté qui intersecte [AE] est le côté le plus proche de E.

    Mais Fremen risque de trouver un contre exemple

  10. #10
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Il faut reprendre l'algo de calcul de distance d'un point par rapport à un segment voir la discussion récente à ce sujet.
    La distance d'un point à un polygone convexe est alors le minimum des distances aux côtés.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par sly078 Voir le message
    Oui, une autre solution incorrecte à laquelle j'ai pensé s'inspire de la distance avec les sommets. On pourrait penser que le sommet le plus proche de E appartient au côté le plus proche de E mais ce n'est pas toujours le cas non plus.
    euh... Dans un polygone convexe, si...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Points : 419
    Points
    419
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    tout dépend de ce qu'on veut

    Si c'est une estimation de la distance , cela suffit

    Si par contre on veut la vraie, il faut appliquer au côté trouvé par cet algo le tien
    Ca non plus, ça ne marche pas, comme le montre l'exemple suivant :
    Images attachées Images attachées  

  13. #13
    Membre régulier Avatar de sly078
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 116
    Points
    116
    Par défaut
    Avec un exemple alors :
    Coordonnées des sommets : (1,0),(1,6),(0,4),(0,2)
    Point E : (2,3)

    Désolé de ne pas faire un dessin mais le problème c'est lorsque le point E est plus proche d'un côté très long (donc dont les extrémités peuvent être très éloignées de E) que du sommet le plus proche.

    EDIT : bon ben, Fremen a été plus rapide que moi, et avec le dessin en supplément. Merci à toi

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Points : 419
    Points
    419
    Par défaut
    Citation Envoyé par sly078 Voir le message
    EDIT : bon ben, Fremen a été plus rapide que moi, et avec le dessin en supplément. Merci à toi
    Hé hé, le Lucky Luke du contre exemple

  15. #15
    Membre régulier Avatar de sly078
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par sly078 Voir le message
    Maintenant il y a peut être une autre possibilité : le sommet A le plus proche de E appartient au côté le plus proche de E OU le seul côté qui intersecte [AE] est le côté le plus proche de E.
    Fremen, tu n'as pas donné de contre exemple pour cet assertion. Dois-je en déduire que je tiens quelque chose ? ^^

    Pour l'instant j'en reste à ma première solution. Même si celle d'au dessus est correcte elle ne sera pas forcément plus rapide puisqu'il faut d'abord trouver le sommet le plus proche puis tester l'intersection avec tous les côtés...

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Points : 419
    Points
    419
    Par défaut
    Ben, en fait, ça me paraît un peu circulaire comme définition... Tu ne veux pas essayer de la reformuler plus précisément ?

  17. #17
    Membre régulier Avatar de sly078
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 116
    Points
    116
    Par défaut
    Algorithme pour trouver la distance d'un point E à un polygone :

    1. Calculer la distance de E à chaque sommet du polygone
    2. Garder en mémoire le sommet A le plus proche de E
    3. Vérifier si un des côtés du polygone intersecte le segment [AE].
    3.1 Si oui, le distance recherchée est la distance à ce côté
    3.2 Si non,
    3.2.1 Calculer la distance entre E et les deux côtés comprenant le sommet A
    3.2.2 La distance recherchée est la plus petite des deux

    Encore une fois, je ne suis pas sûr que cela fonctionne...

  18. #18
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    je pense qu'il faut commencer par trouver le sommet le plus proche, afin de diminuer l'espace de recherche.
    Ensuite, comme ton polygone est convexe, il suffit de calculer pour chacun des segments de part est d'autre du sommet le plus proche :
    - la projection orthogonale du point sur la droite porté par le segment.
    - si le point solution n'est pas dans le segment, le point n'est pas solution, sinon c'est gagné.
    Mais il y a un cas à gérer : si pour les deux segments, le point d'intersection n'est pas contenu dans le segment, alors cela veut dire que c'est le sommet la solution.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  19. #19
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    1. Orienter le sens de parcours des sommets: S1,S2,...,Sn.
     
    2. trouver les points "visibles" depuis P, en calculant le signe du produit vectoriel (Si,Si+1)^(Si,P).  
     
    3. trouver le point "visible" le plus proche de P.
     
    4. calculer les distances aux 2 segments incluant le point précédent, et retourner la plus petite.
    A mon avis, on peut doit pouvoir optimiser le "4"...
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  20. #20
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Peut être aussi :
    prendre les milieux des côtés et décider que le milieu le plus proche du point correspond au côté le plus proche.
    Vrai ????
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

Discussions similaires

  1. Calcul de distance entre deux points en WGS84
    Par marieR dans le forum Langage
    Réponses: 5
    Dernier message: 03/08/2006, 17h07
  2. Tri par distance d'un point origine
    Par business dans le forum Langage
    Réponses: 4
    Dernier message: 27/04/2006, 07h19
  3. distance entre 2 points avec Point2D
    Par mikees dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 09/01/2006, 16h10
  4. Mesure distance entre 2 points d'une image
    Par vexal dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/05/2005, 14h29
  5. une ligne et un polygone convexe
    Par rekam dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 20/12/2002, 10h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo