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 :

Triangulation


Sujet :

Algorithmes et structures de données

  1. #1
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut Triangulation
    Bonjour tlm,

    Je suis actuellement en train de bosser sur un projet de maillages. Je dois charger différents formats de fichiers (ply, obj, off, etc ...) et je me suis aperçu d'un petit problème. Mon prog se basait uniquement sur des maillages triangulaires. Mais il existe parfois dans des fichiers des quads ou autre.

    Je dois donc redécouper chacune de mes faces pour n'avoir que des triangles mais je ne vois pas trop comment faire . Je connais les coordonnées des points. Quelqu'un aurait-il la solution à mon problème ? Merci d'avance en tout cas.


    Nico.
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 49
    Points : 50
    Points
    50
    Par défaut
    quel type de traingulation utilisé vous ?

  3. #3
    Membre régulier Avatar de nin2
    Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 109
    Points
    109
    Par défaut Triangulation de facettes planes
    Salut !

    Je suppose que les facettes que tu charges sont planes. Il existe beaucoup d'algoritmes de triangulation de polygones.

    S'il s'agit de polygones convexes ou étoilés, il suffit de calculer l'isobarycentre et de relier ensuite chaque couple de sommets du polygone au barycentre pour obtenir des triangles.

    Si les polygones que tu charges ne sont pas convexes, alors là, c'est un peu plus compliqué, l'idée générale est de découper tes faces en plusieurs faces convexes et d'appliquer ensuite la méthode précédente.

    Voila. Si ce n'est pas très clair, je peux entrer plus dans le détail ...

  4. #4
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Oui je pense aussi que les facettes à charger sont planes. Dans ce cas-ci, peux-tu m'expliquer un peu plus en détail l'algo à effectuer ? Merci .
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  5. #5
    Membre régulier Avatar de nin2
    Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 109
    Points
    109
    Par défaut Triangulation : explications ...
    Salut !

    Si j'ai bien compris, le principal problème est qu'il figure dans ton maillage des polygones autres que des triangles, quads par exemple. L'idée est de découper ces quads en triangles en utilisant une méthode très simple :

    1ère étape : calcul de l'isobarycentre du quad (enquelque sorte son "milieu").
    Tu disais que tu possédais les coordonnées de tes sommets. L' isobarycentre est en fait la moyenne de tous les points du polygone (ou quad). Le mieux c'est de prendre un exemple simple. Imaginons que tu travaille avec un quad à 4 sommets A, B C et D dont les coordonnées sont (xA,yA,zA), (xB,yB,zB), (xC,yC,zC), (xD,yD,zD). Appelons G l'isobarycentre du quad ABCD. Soit (xG,yG,zG) les coordonnées de G. Les formules mathématiques du calcul de l'isobarycentre donnent :
    xG = (xA+xB+xC+xD)/4
    yG = (yA+yB+yC+yD)/4
    zG = (zA+zB+zC+zD)/4
    Tu remarqueras qu'il s'agit tout simplement d'un calcul de moyenne basique.
    Si tu as plus de points, c'est le même principe ...

    2ème étape : triangulation.
    Une fois que tu possède le barycentre G de ton quad, il faut relier chaque couple de sommets (consécutifs) à ton barycentre pour obtenir des triangles. Dans notre exemple, cela revient à créer quatre triangles : ABG, BCG, CDG et DAG.
    Ainsi, tu peux transformer tous tes quads en triangles.

    3ème étape : Attention !
    Cette méthode ne fonctionnera bien que pour trianguler des surfaces convexes, mais normalement, tu ne travailles qu'avec des surfaces convexes puisque tu les récupères dans un maillage.

    J'espère que cela te convient. Si des points ne sont pas clairs où s'il te manque des infos pour travailler, n'hésite pas, c'est un domaine que j'aime bien et dans lequel je bosse actuellement.

    Bon courage !



  6. #6
    Membre régulier Avatar de hamster
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 137
    Points : 123
    Points
    123
    Par défaut
    est ce qu'il n'est pas plus simple de "couper" le quadrangle en deux triangles ?? C'est plus économique que d'en créer 4 non ?

    Je comprends pas pourquoi il ne suffit pas de déterminer la diagonale la plus courte et de s'en servir pour couper le quadrangle en deux triangles...

  7. #7
    Membre régulier Avatar de nin2
    Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 109
    Points
    109
    Par défaut Couper en deux ou en quatre ...
    Re-salut,

    La méthode que je t'ai proposé fonctionne avec des polygones qui peuvent avoir plus de quatres sommets. La méthode que tu propose fonctionne uniquement avec des quadrilatères.
    Par contre si tu travaille uniquement avec des quads, tu peux decouper en deux selon une diagonale. C'est clair que c'est moins couteux !!! Dans ce cas, pour trouver la meilleure diagonale, l'dée c'est de tester avec les deux et de garder celles qui découpe en deux triangles qui ont les angles les plus grands possibles (cela évite d'avoir des triangles plats, ce qui est mieux à la visualisation).
    Si tu récupères d'autres figures depuis tes fihiers (du style pentagones, hexagones ...), alors la méthode du barycentre est celle la mieux adaptée (celle qui va créer les meilleurs triangles).

    Si tu veux, j'ai des cours plus poussés (avec des schémas) sur le problème de la triangulation. N'hésite pas !

    A+

  8. #8
    Membre régulier Avatar de hamster
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 137
    Points : 123
    Points
    123
    Par défaut Re: Couper en deux ou en quatre ...
    Citation Envoyé par nin2
    Dans ce cas, pour trouver la meilleure diagonale, l'dée c'est de tester avec les deux et de garder celles qui découpe en deux triangles qui ont les angles les plus grands possibles (cela évite d'avoir des triangles plats, ce qui est mieux à la visualisation).
    Y'a pas un rapport avec Voronoï et Delaunay ?

  9. #9
    Membre régulier Avatar de nin2
    Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 109
    Points
    109
    Par défaut A propos de Voronoi et Delaunay
    L'idée de chercher les angles maximum dans les triangles est le principe fondammental de l'algorithme de triangulation de Delaunay. Cependant, cet algo permet la triangulation d'un nuage de point et ne me semble pas adapté à ton problème. Je pense qu'il fonctionnerait, mais il me semble que ce serait mettre en place une usine à gaz pour pas grand chose. Maintenant si ca te tente de l'implémenter ou si tu en a vraiment l'utilité, cela peut etre très intéresant, à mon avis.

  10. #10
    Membre régulier Avatar de hamster
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 137
    Points : 123
    Points
    123
    Par défaut
    ben à la base c'est pas mon problème, c'est pluôt celui de nicolas66.

    mais je posais cette question par simple curiosité.
    en tout cas merci pour la réponse

  11. #11
    Membre régulier Avatar de nin2
    Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Points : 109
    Points
    109
    Par défaut Oupps !
    Oups, je suis désolé, je n'avais pas vu que je changeais d'interlocuteur
    En tout cas, si tu as d'autres questions, n'hésite pas !
    @+

  12. #12
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Bon j'ai implémenté ca hier et ca marche nikel.

    Ca me semble quand même bizarre qu'il n'existe pas une méthode plus poussée pour découper n'importe quel polygone en un minimum de triangles. Comme le signale hamster, rien qu'avec un quad, on en créé 2 fois plus. Je signale au passage que les mesh que je charge sont énormes (yen a même qu'on ne peut pas charger en une fois ..).

    Ah oui j'allais oublier : merci qd même pour m'avoir aider là-dessus, j'avais pas d'idée du tout
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  13. #13
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    salut,

    si, ca existe lees algos pour decouper un polygone en triangles, mais si c'est pas convexe c'est pas facile.

    Cela dit, si on est avec un polgone convexe, il y a une methode plus simple (ert moins gourmande) qu'en utilisant le centre de gravite :
    - On choisit un sommet
    - on cree un triangle avec ce sommet, son voisin, et le voisin suivant,
    - on continue tant quon ne revient pas au sommet de depart.

    Dans le cas d'un quadrialtere, ca revient a faire 2 triangles
    pour des polygones avec N cotes, ca fait N-2 triangles.

    A+

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par Kangourou
    si, ca existe lees algos pour decouper un polygone en triangles, mais si c'est pas convexe c'est pas facile.

    Cela dit, si on est avec un polgone convexe, il y a une methode plus simple (ert moins gourmande) qu'en utilisant le centre de gravite :
    - On choisit un sommet
    - on cree un triangle avec ce sommet, son voisin, et le voisin suivant,
    - on continue tant quon ne revient pas au sommet de depart.

    Dans le cas d'un quadrialtere, ca revient a faire 2 triangles
    pour des polygones avec N cotes, ca fait N-2 triangles.
    Je n'ai jamais entendu parler de maillage par des polygones non convexes. De toutes façon la méthode de nin2 ne marcherait dans ce cas (le barycentre ne se trouve pas forcément à l'intérieur du polygone).

    Sinon, comme le suggère hamster, on peut toujours utiliser la triangulation de Delaunay, car la méthode que tu décris à un gros inconvénient : elle produits des triangles très plats, ce qui pose beaucoup de problèmes pour un maillage (artéfacts visuels, ...).

  15. #15
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 150
    Points : 180
    Points
    180
    Par défaut
    Tiens j'ai entendu que les mesh ne peuvent pas etre chargé en une seule fois ???? Combien de polygones font-ils ? Quelle machine utilises tu ?

    Je dis ca parceque ca me semble bizarre....

  16. #16
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    oula c'est des mesh énormes j'ai plus les chiffres en tête, jte dirai ça à l'occaz ...
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  17. #17
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 103
    Points : 62
    Points
    62
    Par défaut
    Salut, moi je vais avoir le meme genre de probleme dans les prochaines semaines. Donc je cherche déjà une piste.

    Je cherche a mailler un contour pas forcement convexe. Et ce contour est deja subdiviser par des points. Chaque ligne du contour ne possede pas forcement le meme nombre de points.

    J'ai regardé la methode de Delauney, c'est pas mal comme technique, mais ne correspond pour des cas non convexe.

    On a parler un peu plus haut d'une méthode pour redoucoupé le contour en 2 ou plusieurs coutours convexes. Quelqu'un aurait t-il d'autres informations sur la méthode a employé

    Ou peut etre une autre méthode que Delauney.

    Merci pour vos reponses

  18. #18
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    salut,

    Akta, pour decouper un polygone non convexe en plusieurs polygones convexes, tu peux essayer de diviser en plusieurs triangles.

    - prendre un point qui fait un angle <180 avec ses voisins
    - creer un triangle avec ce point et ses 2 voisins
    - supprimer les 2 aretes du polygone initial, et les remplacer par l'arete joignant les 2 voisins.
    En iterant jusqu'a ce que le polygone n'ait plus que 3 points, on obtient finalement une liste de facettes triangulaires.

    je crois qu'il est possible d'optimiser en commencant par les points qui forment les angles les plus petits, afin d'eviter les grands triangles tres plats.

    A+

  19. #19
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 103
    Points : 62
    Points
    62
    Par défaut
    Merci pour cette réponse,

    pour mon probleme je n'ai pas besoin de découper toutes ma surface en triangle, j'ai juste besoin de n'avoir plus que des contours convexe pour appliqué une méthode de Delauney.

    La maille obtenue est destiné à faire du calcul numérique et ta méthode me donnerait un maillage pas vraiment régulier. En tout cas merci pour ta réponse ca va déjà bien m'aider.

    Merci et A++

Discussions similaires

  1. triangulation d'une sphere
    Par lalaurie40 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 02/10/2005, 14h02
  2. Triangulation de Delaunay pour des carreaux troués
    Par Laurent Gomila dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 27/07/2005, 22h14
  3. triangulation de delaunay
    Par Smuk dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 08/04/2005, 14h15
  4. Triangulation
    Par Pedro dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 12/11/2003, 23h58
  5. Triangulation de Polygones
    Par seb_lisha dans le forum DirectX
    Réponses: 1
    Dernier message: 01/07/2003, 12h40

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