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 :

Union de deux polygones


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Par défaut Union de deux polygones
    Bonjour,

    Pour me simplifier la vie dans projet, j'aurai besoin de "fusionner" deux polygones, appellons les P et Q, c'est à dire de prendre P et Q, et si ils se coupent, de suivre le contour jusqu'a recupérer un seul contour qui englobe les deux polygones P et Q.

    Pour cela, j'ai voulu implémenter un algorithme à la sauce maison, et en decretant que les polygones sont orientés dans le sens trigo, je suit le contour, et à chaque intersection, j'insere le point d'intersection et je passe sur l'autre polygone. Sauf que si on a une double intersection sur le meme segments, à la suite (donc un point de P en dehors de Q, un point dans et un point re dehors à la suite), ça ne marche plus... etj'ai l'impression que si je veux que ça marche, ça me rajoute tellement de tests que ça deviendra le pire algo de tout les temps.
    Donc j'ai fait mes devoirs, et j'ai cherché avec mon ami Google, qui m'a mis sur la voie de l'algo de Weiler-Atherton, qui me parait parfait pour ce travail, mais qui a aussi l'air d'être le secret le mieux gardé d'internet!

    Alors si quelqu'un qui a déjà eu l'occasion de s'en servir pouvait m'éclairer dessus, parce que pour le moment, je n'ai pas trouvé d'explication complète de l'algo, et je comprend rien au PDF de ses "inventeurs"...

    Bien sûr , si vous avez un algo maison qui marche du feu de Dieu, je prend

    Merci infiniment!
    PS. je me suis permis de poster ce message dans le forum C++ aussi, ne sachant pas trop dans quel forum il etait le plus adapté.

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

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Par défaut
    est-ce que le bon exemple http://pilat.free.fr/pdf/weiler.pdf ne te suffit pas pour comprendre l'algo???? C'est vraiment très clair...

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

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Par défaut
    en fait, ma difficulté réside surtout dans le traitement des cas particuliers, comme un segment partagé, ou un point d'un polygone sur un segment de l'autre polygone, ou encore deux points confondus. Par exemple dans le cas dun segment partagé, doit je considérer qu'il est secant à lui même? si oui, comment determiner une intersection entrante de sortante? etc...
    J'ai feuilleté ces deux pdf, mais le premier n'apporte pas de réponse à ce niveau, et le second m'est parfaitement hérmétique...

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

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Par défaut
    http://m.strasser.faculty.free.fr/Mo...sationBase.pdf

    Tu détermines un sommet d'un des 2 polygones intérieurs à l'autre: page 14

    Le chainage décrit p17 dans l'algo de WA est facile à maîtriser. Par exemple, si une intersection Ri tombe sur un sommet Qj, tu peux remplacer Qj par Ri au lieu d'insérer Ri dans ta liste.

    Donc si au départ tu as

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    P1 P2 P3 P4 ...
    Q1 Q2 Q3 Q4...
    avec P2=Q2 et P3=Q3 (segment partagé), tu remplaces par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    P1 R1 R2 P4...
         |   |
    Q1 R1 R2 Q4...
    L'application stricto sensu du parcours des listes avec bascule d'une à l'autre quand c'est un Ri est intègre et suffisante, et ne devrait pas te poser de problème d'implémentation.

  6. #6
    Expert confirmé 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
    Par défaut
    Bonjour,

    est-ce que le bon exemple http://pilat.free.fr/pdf/weiler.pdf ne te suffit pas pour comprendre l'algo????
    Je ne suis pas sur que la méthode fonctionne si le sens de rotation des points est différent dans les 2 polygones. Dans ce cas, Il faudrait rajouter un algo qui normalise le sens de rotation.

    Pour le traitement des cas particuliers, une méthode simple consiste à déplacer les sommets d'epsilon, quitte à les remettre en position initiale à la fin du traitement.

Discussions similaires

  1. Requete sur l'union de deux tables.
    Par sabotage dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/09/2008, 10h51
  2. Réponses: 2
    Dernier message: 08/03/2007, 01h49
  3. Union de deux polygones
    Par aidos dans le forum C++
    Réponses: 4
    Dernier message: 21/12/2006, 03h15
  4. UNION de deux SELECT avec nombre d'arguments différents
    Par orus8 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/07/2004, 14h32
  5. [Débutant] Union de deux tables
    Par nyarla01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/03/2004, 10h40

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