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

MATLAB Discussion :

Tetrahedralisation surface convexe


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 39
    Points : 14
    Points
    14
    Par défaut Tetrahedralisation surface convexe
    Bonjour,

    J'ai un nuade de point en 3D (coordonées X,Y,Z présentes dans un tableau "TableauCoord"). Je souhaite obtenir l'envellope de ce nuage.

    J'utilisais jusqu'à présent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    K=convhulln(TableauCoord)
    trisurf(K,TableauCoord (:,1),TableauCoord (:,2),TableauCoord (:,3))
    Ce code fonctionne très bien pour des surfaces convexes mais malheuresement il m'arrive d'avoir des fonctions concaves et dans ce cas le cas ne fonctionne pas (cf la pièce jointe qui montre 2 images : nuage de point avant triangulation et après).

    Je me suis donc tournée vers la triangulation de Delaunay et par conséquent la fonction "Delaunayn" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Tes = delaunayn(TableauCoord)
    trisurf(Tes,TableauCoord (:,2),TableauCoord (:,1),TableauCoord (:,3))
    Malheuresement j'obtiens le même résultat.

    Est-ce alors un problème de représentation ? J'ai utilisé également "tetramesh" mais dans ce cas les dimensions ne sont pas du tout conservées.

    Auriez-vous une idée d'où peut provenir le problème ?
    Images attachées Images attachées  

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    - Déjà est ce que la tetrahedralisation d'un ensemble non convexe est définie de manière unique ?
    - Pourquoi convhulln() plutot que convhull() ?
    - As-tu essayé la méthode de classe
    convexHull
    Class: DelaunayTri

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 39
    Points : 14
    Points
    14
    Par défaut
    Déjà est ce que la tetrahedralisation d'un ensemble non convexe est définie de manière unique ?
    Question trop théorique pour moi, je n'en ai donc aucune idée


    Pourquoi convhulln() plutot que convhull() ?
    Une erreur de ma part, je travaile avec convhull() mais à noter que l'on obtient le même résultat si on utilise convhulln.

    As-tu essayé la méthode de classe?
    J'ai déjà essayé cette méthpode et le résultat est pire

  4. #4
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Salut,
    les problèmes de recherche d'enveloppe non convexe possèdent de multiples solutions, dans ton cas je te propose un algo de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Découper le nuage de points en section selon X % on profite que l'enveloppe des coupes selon X est convexe
    Pour chaque nuage n % commencont par le nuage à plus petit X
     si n==1    
      Chercher l'enveloppe convexe de ce nuage.
      Chercher les vecteurs normaux à chaque face
      Garder les points des faces dont les vecteurs ont une composante X négative
      Mettre les points des faces dont les vecteurs ont une composante X positive en tampon
     si n>1 et n<dernier
      Chercher l'enveloppe convexe du nuage n et des points mis en tampon. 
      Garder les points des faces dont les vecteurs ont une composante X négative
      Vider le tampon
      Mettre les points des faces dont les vecteurs ont une composante X positive en tampon
     si n==dernier  
      Chercher l'enveloppe convexe du nuage n et des points mis en tampon.
      Garder tous les points
    fin
    L'ensemble des points gardés devraient former une enveloppe non convexe, et en fonction de la taille de ta découpe tu auras des résultats plus ou moins satisfaisant.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 39
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Je veux bien tenter mais avant je souhaite éclairsir deux trois choses car je ne sais pas si on est parti sur le même objectif.

    En effet, de mon coté j'ai donc déjà en ma possession les points qui forment le contour de mon nuage. J'utilise ensuite la tetrahedralisation afin d'obtenir une surface et en particulier un tableau des faces de mon envelope (non convexe) pour pouvoir ensuite le représenter dans un autre logiciel.
    Ton code n'a-t-il pas pour objectif d'obtenir ces points ?

    2eme question la phrase "Mettre les points en tampon" signifie conserver les données. Est-ce exacte ?

  6. #6
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    1- en effet je cherchais à trouver les points de l'enveloppe.
    Est ce que simplement un delaunaytri sur ton nuage de points ne te donne pas un bon résultat?
    2- oui, je met les données en tampon pour les utiliser à l'itération suivante. Ces données là ne sont pas à sauvegarder par la suite

  7. #7
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 39
    Points : 14
    Points
    14
    Par défaut
    Alors j'ai essayé delaunayTri et j'obtiens un résultat pas du tout convaiquant pire que dans mon post 1 (je te laisse en juger avec la photo en pièce jointe)

    Donc en regardant ton code ça m'a donné une idée qu'il faut que j'exploite : trouver les point d'inflexion et couper mon nuage en plusieurs morceaux, je réalise plusieurs triangulations (j'aurais probablement un problème d'interface par contre mais ce n'est pas très grave car mes points sont très rapprochés).

    aurais-tu une idée pour savoir si mon point est un point d'inflexion (sachant que je connais uniquement les coordonées de mes points) ?
    Images attachées Images attachées  

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 924
    Points
    52 924
    Par défaut
    Jette un œil à cette discussion Création d'une surface fermée au plus près d'un nuage de points et à la contribution que j'avais utilisée

    Sinon, pourrais-tu nous faire parvenir un jeu de données pour faire quelques tests ?

  9. #9
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 39
    Points : 14
    Points
    14
    Par défaut
    Merci bien je vais regarder.
    Je t'a mis dans un tableau excel mes données.
    Remarque : pour bien voir l'erreur il faut tracer (y,x,z)

    Edit : L'utilisation de Alpha Shapes ne correspond malheuresement pas à ce à quoi je m'attends (toujours des lignes qui relient le point source avec les autres points).
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 924
    Points
    52 924
    Par défaut
    Il y a des paramètres à régler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    X = xlsread('data.xlsx');
     
    [V,S] = alphavol(X, 10);
     
    figure
     
    plot3(X(:,1),X(:,2),X(:,3),'r*');
    hold on
    trisurf(S.bnd,X(:,1),X(:,2),X(:,3), ...
        'FaceColor','b', ...
        'FaceAlpha',1)
    axis equal vis3d
    Voir le résultat sur l'image attachée

    Le second paramètre représente le rayon de la sphère qui roule sur le domaine
    Renseigne toi mieux sur l'algorithme "Alpha Shape"

    Sinon, d'après tes données, tu pourrais aussi assez facilement générer des surfaces NURBS entres les contours. Il y a quelques contributions sur le File Exchange : http://www.mathworks.fr/matlabcentra...%93&term=nurbs
    Si tu poursuis sur cette voie, je te conseille la bible : The NURBS Book

    Un autre algo "sympa", vu le profil de ton volume, est d'idéaliser ton volume en "projetant" chaque point sur un cylindre rectiligne de même orientation que ton nuage de points. La génération de surface devient dès lors simple.
    Images attachées Images attachées  

  11. #11
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 39
    Points : 14
    Points
    14
    Par défaut
    J'avais pensé à passer par des NURBS mais étant donné que je souhaitais obtenir un tableau de face et que je savais qu'une triangulation donne ce genre d'info je suis restée sur cette idée.

    Quant à l'autre solution, je ne vais probablement pas l'approfondir car je vais réaliser cette opération sur plusieurs nuages qui n'auront pas du tout la même forme (completement convexe, présence de concavité ...).

    Je vais donc rester sur "alphashapes" qui fonctionne pour tout mes cas de figure. Je peux donc considèrer cette discussion comme résolue.

    Je vous remercie de l'aide appporté et à bientôt .

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

Discussions similaires

  1. Taille des surfaces avec DirectDraw
    Par Shakram dans le forum DirectX
    Réponses: 5
    Dernier message: 09/09/2002, 01h42
  2. Effet Fade In / Fade Out sur une surface DirectDraw
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 08/09/2002, 18h37
  3. Sauvegarder une surface dans un fichier
    Par Freakazoid dans le forum DirectX
    Réponses: 6
    Dernier message: 18/08/2002, 16h23
  4. Redimensionnement d'une surface
    Par Freakazoid dans le forum DirectX
    Réponses: 4
    Dernier message: 01/07/2002, 23h01
  5. Opengl -- Les surfaces
    Par Anonymous dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/05/2002, 11h14

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