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 :

Savoir si un point se trouve à l'intérieur d'un polygone fermé?


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut Savoir si un point se trouve à l'intérieur d'un polygone fermé?
    Bonjour,

    Pour un de mes développements, je dois savoir si un point se trouve à l'intérieur d'un polygone fermé ...
    Je possède la liste des n points du polygone: p0, p1, ... pn-1.
    Comme il s'agit d'un polygone fermé: p0 = pn <=> (x0,y0) = (xn, yn).

    Je me sers donc de n + 1 points mais l'utilisateur n'en fournit que n.

    Quelqu'un pourrait m'aider svp? Je suis câlé...

    @+,
    Rod

  2. #2
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Je pense p-e avoir un début de piste.
    Lorsqu'un point est à l'intérieur d'un polygone, la somme des angles entre ce point et les points constituants le polygone est égale à 360°.

    Est-ce que c'est correct?

  3. #3
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Rodrigue Voir le message
    Je pense p-e avoir un début de piste.
    Lorsqu'un point est à l'intérieur d'un polygone, la somme des angles entre ce point et les points constituants le polygone est égale à 360°.

    Est-ce que c'est correct?
    non..

    C'est juste si le polygone est convexe..


    http://www.faqs.org/faqs/graphics/algorithms-faq/

    sujet 2.03

  4. #4
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Se ramener a un cas que tu sais calculer facilement le triangle.

    Si tu sais décomposer ton polygone en triangles, alors il te suffit de calculer si le point est dans l'un des triangles.

    http://www.siggraph.org/education/ma...s/polygon1.htm

    http://fr.wikipedia.org/wiki/Triangu...39;un_polygone

    mais elle est moins efficace que celle de souviron je pense.

  5. #5
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par jabbounet Voir le message
    Se ramener a un cas que tu sais calculer facilement le triangle.

    Si tu sais décomposer ton polygone en triangles, alors il te suffit de calculer si le point est dans l'un des triangles.
    pourquoi se compliquer la vie ??


    Regarde la complexité des calculs...


    Cet algorithme a une complexité en O(n log n).


    L'algo cité est en O(N), avec une complexité simple.




    NB: la triangulation peut être une très bonne méthode pour plein de choses, mais la meilleure méthode à mon sens est celle de Delaunay (les triangles les plus équilatéraux (ou isocèles) possibles et les plus "égaux").. Mais pour ce genre de problème c'est un peu prendre un marteau pour écraser une mouche..

    Quant au problème de découper en triangles un polygone, le poids tient au fait que chque sommet participe pour 3 fois aux calculs : 2 fois à chaque extrémité de la base et 1 fois en tant que sommet du triangle..

  6. #6
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    pourquoi se compliquer la vie ??
    Regarde la complexité des calculs...
    L'algo cité est en O(N), avec une complexité simple.

    NB: la triangulation peut être une très bonne méthode pour plein de choses, mais la meilleure méthode à mon sens est celle de Delaunay (les triangles les plus équilatéraux (ou isocèles) possibles et les plus "égaux").. Mais pour ce genre de problème c'est un peu prendre un marteau pour écraser une mouche..

    Quant au problème de découper en triangles un polygone, le poids tient au fait que chque sommet participe pour 3 fois aux calculs : 2 fois à chaque extrémité de la base et 1 fois en tant que sommet du triangle..
    C'etait juste pour signaler son existence, tu as oublié de reprendre le
    Citation Envoyé par jabbounet
    mais elle est moins efficace que celle de souviron je pense.

  7. #7
    Membre Expert Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Par défaut
    Si O est le point & P1...Pn le polygone, sommer les angles consécutifs PiOPi+1. Si congru à 2pi, c'est dedans.

  8. #8
    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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Nemerle Voir le message
    Si O est le point & P1...Pn le polygone, sommer les angles consécutifs PiOPi+1. Si congru à 2pi, c'est dedans.
    Ca m'a l'air bien robuste aux erreurs d'arrondi ca.

    Sinon je propose (encore et toujours) mon ami le Winding Number.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Salut!

    Citation Envoyé par Nemerle Voir le message
    Si O est le point & P1...Pn le polygone, sommer les angles consécutifs PiOPi+1. Si congru à 2pi, c'est dedans.
    C'était la première idée de Rodrigue, et comme l'a dit souviron34, ça ne fonctionne que sur des polygones convexes (enfin en tout cas sur des polygones un peu tordu, ça ne marche plus)... mais bon ça dépend aussi des besoin de Rodrigue, si ça se trouve on cherche compliqué alors que ces polygones sont peut-être des polygones réguliers...

    Sinon je propose (encore et toujours) mon ami le Winding Number.
    Juste pour info, tu l'appliquerais comment dans le cas présent?
    J'ai rapidement lu ce que c'était sur Wikipedia et apparemment, il faut connaître une équation paramétrique de la courbe, donc ici ce serait quoi l'idée? paramétrer tous les segments qui forment le polygone pour pouvoir ensuite appliquer l'algo tranquillement?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  10. #10
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par jabbounet Voir le message
    C'etait juste pour signaler son existence, tu as oublié de reprendre le
    j'avais pas oublié, j'avais mis des smileys


    Citation Envoyé par pseudocode Voir le message
    Ah quel dommage. T'as pris le 1er lien dans Google, et ta réponse était dans le second : winding number
    ce qui revient à l'algo cité, qui compte le nombre de traversées..

  11. #11
    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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    ce qui revient à l'algo cité, qui compte le nombre de traversées..
    Oui et Non.

    Non, car le nombre de traversées (Crossing Number) ne tient pas compte du sens (trigo/horaire) du coté traversé. Ce qui pose un problème dans le cas de polygone croisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     _______________
    |    _____      |
    |   |     |     |
    |   |  X  |     |
    |   |_____|_____|
    |_________|
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. Comment savoir si un point est a l intérieur d un cercle (Urgent SVP)
    Par the rost dans le forum SIG : Système d'information Géographique
    Réponses: 2
    Dernier message: 12/05/2013, 23h29
  2. Savoir si un point se trouve dans un tétraèdre
    Par zenux dans le forum Mathématiques
    Réponses: 22
    Dernier message: 02/02/2009, 09h27
  3. Calcul vectoriel (savoir si un point est à l'intérieur d'un triangle)
    Par Invité dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/10/2008, 22h46
  4. Savoir si un point se trouve dans un objet convexe
    Par zenux dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 05/03/2008, 15h21
  5. savoir si 1 point est a l'intérieur d'un cercle ...
    Par skarladevobsy dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 23/05/2002, 18h14

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