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

Développement 2D, 3D et Jeux Discussion :

Intersection de 2 polygones 3D convexes : algorithme pertinent ?


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Points : 67
    Points
    67
    Par défaut Intersection de 2 polygones 3D convexes : algorithme pertinent ?
    Bonjour tout le monde !

    Je cherche une solution (la plus simple possible) pour savoir si 2 polygones convexes se touchent.
    J'ai plusieurs hypothèses :
    - Les polygones sont plans
    - Un des polygones est dans un plan fixe en X, Y ou Z (horizontal ou vertical), mais ça ne devrait pas changer grand chose
    - L'autre polygone n'est pas dans un plan fixe
    - Ils sont convexes comme déjà mentionné

    J'ai rencontré pas mal de méthodes, certaines pour du 2D, dont Separating Axis Theorem. J'ai donc cherché SAT pour du 3D et je suis tombé sur http://www.gamedev.net/topic/606539-...nvex-polygons/ cette discussion.

    Est-ce que la méthode proposée par "taz0010" vous paraît pertinente ? Elle me semble pas mal, mais j'ai un doute et je ne trouve pas d'autre trace sur le web.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    1. loop through each line segment that makes up Polygon A, checking whether each segment intersects with Polygon B's plane. If no segments intersect, break early and return Polygon B's plane as the separating plane.
    2. loop through each line segment that makes up Polygon B, checking whether each segment intersects with Polygon A's plane. If no segments intersect, break early and return Polygon A's plane as the separating plane.
    3. If both 1 and 2 did find intersections, see if the two line segments overlap. If they do overlap, there is an intersection. Splitting one of the polygons down the line of intersection will resolve the intersection.
    4. If the segments did not overlap, then the polygons do not intersect. To construct the separating plane, we use the cross product of the normals of the two planes as the normal, and for the location we select a point (let's say half way between) the two line segments (though any point within this region should be valid).
    Merci d'avance,

    Luigi

  2. #2
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut
    Oui, l'algo me semble correct pour des formes convexes, les 2 segments à tester représentent chaque "tranche" d'un poly traversant le plan de l'autre, leur intersection signifie l'intersection des polys. Et ça peut être bien accéléré si on sait qu'un poly est sur les axes .

  3. #3
    Membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Points : 67
    Points
    67
    Par défaut
    Merci d'avoir pris le temps de répondre NICS !

    Quand tu dis que ça peut être accéléré lorsqu'un des polygones est sur les axes, tu veux dire qu'un des polygones est dans le plan {X;Y}, {Y;Z} ou {X;Z} ?
    C'est le test d'intersection qui peut être accéléré (simple comparaison des coordonnées qui ne sont pas sur les axes) ?

  4. #4
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut
    De rien, je passais par là ^^ .

    Quand tu dis que ça peut être accéléré lorsqu'un des polygones est sur les axes, tu veux dire qu'un des polygones est dans le plan {X;Y}, {Y;Z} ou {X;Z} ?
    Oui, déjà trouver les 2 points d'intersection du polygone "quelconque" est très rapide car la distance (point-plan sur les axes) est immédiate.
    Et le test final d'intersection des 2 segments peut être ramené à un test 2D, dans le plan sur les axes (car les droites portant les 2 segments ne peuvent pas se "rater").

  5. #5
    Membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Points : 67
    Points
    67
    Par défaut
    Si quelqu'un d'autre passe par là, est-ce-que quelqu'un voit un cas où ça ne marche pas dans le cas où un des polygones est concave ?

    Edit : En y réfléchissant, je vois un cas probable... lorsqu'un des polygones 'englobe' l'autre.

  6. #6
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut
    Et ben j'étais encore là...

    hmm, pour un poly concave à priori la différence est que tu peux avoir plusieurs segments d'intersection avec le plan du poly convexe. Il faut alors tous les tester,
    ça revient à tester plusieurs zones convexes du poly concave.
    Et pour reconstituer les segments avec les points d'intersection, prendre les paires de points dans l'ordre : 1ere segment, 2e espace, 3e segment, etc...
    Le nombre de paires ne peut qu'être...impair .

    Je fais du zèle, désolé ^^ .

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

Discussions similaires

  1. colorer intersection de deux polygones
    Par awalter1 dans le forum Linux
    Réponses: 4
    Dernier message: 30/01/2012, 08h55
  2. Intersection entre un polygone et une droite en c#
    Par youcef lvirus dans le forum C#
    Réponses: 5
    Dernier message: 14/05/2011, 16h40
  3. Polygone non convexe
    Par XemHA dans le forum OpenGL
    Réponses: 5
    Dernier message: 17/03/2008, 10h37
  4. Polygone non convexe (le retour) : réduire le nombre de sommets
    Par Graffito dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 28/01/2008, 09h26
  5. Dessiner un polygone non convexe
    Par BruceBoc dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 24/10/2007, 08h11

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