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 :

Polygones quelconques imbriqués


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 55
    Points
    55
    Par défaut Polygones quelconques imbriqués
    Bonjour à tous,
    On connaît bien l'algorithme permettant de savoir si un point se situe à l'intérieur d'un polygone.
    Existerait-il un algorithme déterminant si un polygone est à l'intérieur d'un autre polygone?
    Je précise que les polygones en question peuvent être concaves et jointifs par un certain nombre de faces.
    Souleyre

  2. #2
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    En sachant si un point se situe à l'intérieur d'un polygone, tu peux tester si tous les sommets de ton polygone sont bien intérieurs à ton polygone externe.
    Ceci n'est valable que si ton polygone externe est convexe.

    Si tes 2 polygones sont concaves, tu peux tester s'il n'y a pas d'intersection pour de l'ensemble des segments des 2 polygones.

  3. #3
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 55
    Points
    55
    Par défaut
    Bien sûr, on ne sait rien a priori de la nature des polygones, concaves ou convexes, jointifs ou non. La solution brutale qui consisterait d'examiner point par point s'il existe au moins un point à l'intérieur d'un autre polygone est à exclure en raison de leur très grand nombre.
    Au cas présent, il s'agit de trouver un algorithme généraliste.

  4. #4
    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
    Points : 16 084
    Points
    16 084
    Par défaut
    Il suffit de tester les intersections segment/segment des contours des polygones. Non ?

  5. #5
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 55
    Points
    55
    Par défaut
    Non car les polygones ne sont jamais sécants.

  6. #6
    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
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par Souleyre Voir le message
    Non car les polygones ne sont jamais sécants.
    ?

    Je peux avoir un exemple de 2 polygones non sécants qui ne sont pas à l'intérieur l'un de l'autre ?

  7. #7
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 55
    Points
    55
    Par défaut
    Deux cartes à jouer posées l'une à côté de l'autre.

  8. #8
    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
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    Citation Envoyé par Souleyre Voir le message
    La solution brutale qui consisterait d'examiner point par point s'il existe au moins un point à l'intérieur d'un autre polygone est à exclure en raison de leur très grand nombre.
    Qu'entends-tu pas "leur très grand nombre"? Pourrais-tu nous donner un ordre de grandeur?

  9. #9
    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
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par Souleyre Voir le message
    Deux cartes à jouer posées l'une à côté de l'autre.
    Ah, c'est pas faux.

    Auquel cas il suffit de faire 2 tests pour savoir si on est dans ce cas. Non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Pour chaque Segment Sa du Polygone A
        Pour chaque Segment Sb du Polygone B
           Si (Sa coupe Sb) retourner "A intersecte B"
       FinPour
    FinPour
     
    Pa = un sommet quelconque de A
    Si (Pa est a l'intérieur du Polygone B) retourner "A est inclus dans B"
     
    Pb = un sommet quelconque de B
    Si (Pb est a l'intérieur du Polygone A) retourner "B est inclus dans A"
     
    retourner "A et B sont disjoints"

  10. #10
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 55
    Points
    55
    Par défaut
    Qu'entends-tu pas "leur très grand nombre"? Pourrais-tu nous donner un ordre de grandeur?
    Les polygones contenants entre 5.000 et 10.000, les polygones inclus entre 4.000 et 8.000
    Pour chaque Segment Sa du Polygone A
    Pour chaque Segment Sb du Polygone B
    Si (Sa coupe Sb) retourner "A intersecte B"
    FinPour
    Il n'y a jamais de polygones sécants, ils sont:
    • disjoints extérieurs
    • jointifs extérieurs
    • jointifs intérieurs (l'un à l'intérieur de l'autre)
    • disjoints intérieurs (l'un à l'intérieur de l'autre)

  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
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par Souleyre Voir le message
    Il n'y a jamais de polygones sécants, ils sont:
    • disjoints extérieurs
    • jointifs extérieurs
    • jointifs intérieurs (l'un à l'intérieur de l'autre)
    • disjoints intérieurs (l'un à l'intérieur de l'autre)
    et donc ta question "déterminer si un polygone est à l'intérieur d'un autre polygone" se résume a savoir si on est dans l'un des 2 derniers cas. C'est à dire que tous les sommets du polygone A sont a l'intéreur du polygone B. Ca revient a considere B comme convexe, car de toutes façons A ne coupe jamais B.

  12. #12
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 55
    Points
    55
    Par défaut
    ta question "déterminer si un polygone est à l'intérieur d'un autre polygone" se résume a savoir si on est dans l'un des 2 derniers cas
    Exact.

    Ca revient a considere B comme convexe, car de toutes façons A ne coupe jamais B
    Faux. Imagine un M majuscule fermé à sa base et contenant un autre M majuscule fermé, les 2 polygones sont bien concaves.

  13. #13
    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
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par Souleyre Voir le message
    Faux. Imagine un M majuscule fermé à sa base et contenant un autre M majuscule fermé, les 2 polygones sont bien concaves.
    Oui, ils sont bien concaves tous les 2.

    Je disais juste qu'il suffisait de verifier tous les sommets du polygone A sont a l'intérieur du polygone B, ce qui est le meme test que pour 2 polygones convexes.

  14. #14
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 55
    Points
    55
    Par défaut
    Tu as raison, mais il s'agit là d'une méthode un peu brutale.
    Intuitivement, il me semble qu'il doit exister une méthode analytique à partir des coordonnées de l'ensemble des points des polygones A & B.

  15. #15
    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
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par Souleyre Voir le message
    Tu as raison, mais il s'agit là d'une méthode un peu brutale.
    Intuitivement, il me semble qu'il doit exister une méthode analytique à partir des coordonnées de l'ensemble des points des polygones A & B.
    Un peu brutale ?

    Ca ne mes semble pas excessif.

    Il faut voir la configuration de tes 10.000 polygones. S'ils ne sont pas tous superposés les uns aux autres, une comparaison de leurs bounding box devrait réduire les tests necessaires. Au pire des cas (inclusion du polygone), il faut faire un test d'inclusion point/polygone pour chaque sommet du polygone.

  16. #16
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 55
    Points
    55
    Par défaut
    Et bien, s'il n'existe pas de méthode analytique élégante, il me faudra me résoudre à tester l'inclusion de chaque sommet du groupe B dans chaque polygone du groupe A! (quelques heures de traitement en perspective!)
    Merci quand même pour ton aide.

  17. #17
    Expert éminent sénior

    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
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    la méthode "élégante" consiste à faire des opérations booléenes sur les polygones...


    Si union = intersection, alors l'un des deux est compris dans l'autre...

  18. #18
    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
    Pour optimiser, on peut utiliser determiner pour chaque polygone un "centre" (barycentre opar exemple, mais pas besoin de grande précision), et à partir de ce centre les 2 circles internes et externes qui contiennent tous les points du polygone (rayon interne/externe = min/max des distances des sommets au centre).

    Ensuite, on déduira rapidement :
    - si les cercles externes de PolX et PolY sont disjoints, les 2 poly sont disjoints extérieurs.
    - si le cercle externe de PolX est inclus dans le cercle interne de PolY, alors POLX est dans POLY.

    Sinon, on fait le calcul normal.

  19. #19
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 55
    Points
    55
    Par défaut
    Pour optimiser, on peut utiliser determiner pour chaque polygone un "centre" (barycentre opar exemple, mais pas besoin de grande précision), et à partir de ce centre les 2 circles internes et externes qui contiennent tous les points du polygone (rayon interne/externe = min/max des distances des sommets au centre).
    La méthode du barycentre ne convient hélas pas aux cas des polygones concaves!

    la méthode "élégante" consiste à faire des opérations booléenes sur les polygones...
    Si union = intersection, alors l'un des deux est compris dans l'autre...
    Cette méthode me paraît très intéressante. Pourrais-tu me mettre sur la voie?

  20. #20
    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
    La méthode du barycentre ne convient hélas pas aux cas des polygones concaves!
    La meilleure position théorique pour le "centre" est celle qui minimise la différence entre rayon interne et rayon externe. Toutefois, la méthode d'optimisation fonctionne avec tout point situé à l'intérieur du polygone (ou sur le bord, auquel cas le rayon interne sera égal à 0).

    Ainsi, si le "barycentre" est n'est pas à l'intérieur, on peut utiliser comme "centre" le point du polygone le plus proche du barycentre .

Discussions similaires

  1. Interpolation de couleurs/valeurs sur un polygone quelconque
    Par Earthwormjim dans le forum Algorithmes et structures de données
    Réponses: 33
    Dernier message: 24/11/2008, 14h13
  2. Réponses: 8
    Dernier message: 17/04/2007, 00h04
  3. point ou non dans un polygone quelconque
    Par Mandarine dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 11/06/2006, 04h03
  4. Comment texturer un polygone quelconque ?
    Par Invité dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/05/2006, 14h29
  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, 20h02

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