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

Algorithmes et structures de données Discussion :

point ou non dans un polygone quelconque


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 129
    Points : 53
    Points
    53
    Par défaut point ou non dans un polygone quelconque
    Voila mon problème: j'ai une liste de points (ordonés) qui me forment un polygone. J'ai aussi un autre point et la question que je veux résoudre est: le point est il dans le polygone ou pas.

    J'ai vu ce sujet traité mais qu'avec le cas ou le polygone était un carré ou un triangle. moi il peut être quelconque.

    La méthode de tracer une demie droite depuis mon point et de regarder combien de fois elle coupe mon poygone (1 nombre pair et je suis à l'extérieur et un nombre impair à l'intérieur) ne me convient guère. En effet cela pose des problème au niveau des coins de mon polygones. En effet si je suis à l'interieur et que je passe par un coin(provenant d'un angle obtu) puis que je sors, cela me fait 2 intersections...

    Quelqu'un connait une méthode élégante pour résoudre mon problème ?

  2. #2
    Membre habitué Avatar de larnicebafteur
    Inscrit en
    Mai 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 133
    Points : 131
    Points
    131
    Par défaut
    Voici une idée :

    Soit M le point dont on veut savoir s'il est à l'intérieur du polygone.

    Pour chaque côté du polygone, déterminer sa normale intérieure au polygone (par produit vectoriel avec un vecteur qui est normal au polygone). Puis par produit scalaire entre ce vecteur normal et celui constitué par M et le milieu du côté testé, on détermine si M est situé vers l'intérieur ou l'extérieur. En recommençant pour chaque côté, on trouvera si M est à l'intérieur du polygone.

    Par contre, cette méthode risque de ne pas fonctionner si le polygone présente des concavités.

    Au fait, le polygone peut-il être concave ?

    Car dans ce cas, on peut toujours imaginer une triangulation du polygone et determiner si le point M est à l'intérieur de chaque triangle. C'est un peu lourd, mais j'ai l'impression que toute autre méthode risque de ne pas fonctionner en cas de concavité !
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème

  3. #3
    Membre habitué Avatar de larnicebafteur
    Inscrit en
    Mai 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 133
    Points : 131
    Points
    131
    Par défaut
    Sinon, en ce qui concerne la méthode qui consiste à determiner la parité du nombre d'intersection entre un rayon partant du point M et avec le polygone, on peut tout de même l'utiliser en prenant quelques précautions. Il suffit de tester que chaque point du polygone n'appartient pas à la demi-droite, et dans le cas contraire, prendre une autre demi-droite.
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème

  4. #4
    Membre habitué Avatar de larnicebafteur
    Inscrit en
    Mai 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 133
    Points : 131
    Points
    131
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Pour faciliter l'implémentation de la méthode de la parité, on peut :
    1) utiliser une demi-droite parallèle aux axes de coordonnées (axe X ou Y).
    2) lorsqu'un sommet est sur la demi-droite (exemple, même X que le point testé) , on le décale d'epsilon.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  6. #6
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par Mandarine
    La méthode de tracer une demie droite depuis mon point et de regarder combien de fois elle coupe mon poygone (1 nombre pair et je suis à l'extérieur et un nombre impair à l'intérieur) ne me convient guère. En effet cela pose des problème au niveau des coins de mon polygones. En effet si je suis à l'interieur et que je passe par un coin(provenant d'un angle obtu) puis que je sors, cela me fait 2 intersections...
    Cas particulier facilement résolu la dernière fois il me semble... si les points précédant et suivant le point d'intersection sont du même côté de la demi-droite, compter deux intersections, et si ils sont un de chaque côté, en compter une seule.

    Citation Envoyé par Graffito
    2) lorsqu'un sommet est sur la demi-droite (exemple, même X que le point testé) , on le décale d'epsilon.
    Roooooh! Trop beau ça!!! Je me le note...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  7. #7
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    bien le bonjour,

    Une solution très facile à mettre en oeuvre et très rapide à exécuter consiste à calculer la somme des angles orientés de sommet le point à analyser et passant par chacun des sommets du polygone, dans l'ordre.

    Donc pour un polygone à n côtés, ça ne coute que n additions.
    Si la somme est 360, le point est dans le polygone, sinon la somme vaut 0 et le point est en dehors. Concave ou convexe, ça fonctionne.

  8. #8
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par khayyam90
    Donc pour un polygone à n côtés, ça ne coute que n additions.
    Euh... oui... enfin... faut pas oublier de rajouter le calcul des n angles avant...

    Eh bé ça fait deux méthodes ça, on devrait voir apparaitre un "résolu" bientôt, non?
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 129
    Points : 53
    Points
    53
    Par défaut
    Merci bien,

    Le résolu arrive du temps de récupérer de mes 7h de décallage horaire pour me rendre aux USA et de lire vos réponses.

    J'avais penser à changer de droite lorsque je rencontrer un coin mais ce n'est pas très hestétiques.
    Par contre j'adore les 2 solutions: celle pour résoudre le problème de l'intersection et celle qui consiste à regarder les angles

    Le problème maintenant c'est laquelle choisir ?

    Merci et bonne fin de Weekend

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Savoir si un point est dans un polygone.
    Par poly128 dans le forum Langage
    Réponses: 8
    Dernier message: 18/11/2008, 09h34
  2. Tester si un point est présent dans un polygone
    Par habasque dans le forum 2D
    Réponses: 11
    Dernier message: 26/09/2007, 16h00
  3. Point dans un polygone
    Par titelisette dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/04/2007, 11h51
  4. Trouver si un point est dans un polygone
    Par Mucho dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 15/09/2006, 17h36
  5. Savoir si un point est inclus dans un polygone quelconque
    Par SuperBIBI dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 02/08/2005, 19h02

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