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 :

Equation de surface à partir d'un nuage de points


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 31
    Points : 23
    Points
    23
    Par défaut Equation de surface à partir d'un nuage de points
    Bonjour,

    j'ai un fichier STL (maillage d'une pièce avec des petits triangles) qui contient les coordonnées X, Y, Z de tous les sommets de ces triangles.

    Je souhaiterais :
    1. Obtenir une équation de la surface qui "fit" au mieux le nuage de points
    2. Savoir si un point supplémentaire quelconque est situé d'un côté ou de l'autre de ma surface

    La surface n'est pas une surface fermée (je joins une image)

    Quelqu'un aurait une idée ?
    Merci par avancePièce jointe 50081

  2. #2
    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
    Salut,

    tu cherches une surface globale pour ta pièce? (si non on dirait que l'on peut découper ta surface en 3 surfaces : 2 plans sur les côtés et une surface courbe au milieu)

    Pour ajuster de telle surface (courbe), le plus courant est de faire une approche polynomiale.


    2. Savoir si un point supplémentaire quelconque est situé d'un côté ou de l'autre de ma surface
    Peux-tu être plus précis?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Salut!

    Donnes-nous le code que tu as implemente pour ne pas partir du 0.

    Avec cela on peux t'aider suplimentaire!

    Amicalment,

    Michel

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par magelan Voir le message
    tu cherches une surface globale pour ta pièce? (si non on dirait que l'on peut découper ta surface en 3 surfaces : 2 plans sur les côtés et une surface courbe au milieu)Peux-tu être plus précis?
    En fait voici précisément mon problème :
    1. J'utilise une géométrie à partir de laquelle "j'ensemence" un écoulement (càd, je calcule des lignes de courant avec la fonction STREAM). Pour ce faire, j'utilise comme point de départ de chaque ligne de courant, le barycentre de chacun de mes triangles constituant ma pièce (cf. plan.jpg).
    2. Une fois que j'ai mes lignes de courant, je veux savoir si je recoupe ma géométrie de départ. J'ai pour ça un petit algorithme qui me permet de savoir si un segment défini par 2 point d'une ligne de courant intersecte un triangle.

    Pb : Dans l'image jointe (plan.jpg) je ne définis que (?!) 50 points de départ de ligne de courant à raison de 10000 points par lignes de courant et 4200 triangles, ça prend un temps monstrueux !!... (plus de 3h et la 1ere ligne de courant pas terminée)

    J'ai écrit donc un autre algo qui défini l'équation du plan à partir du nuage de points et je teste les lignes de courant sur l'équation de ce plan (6s pour toutes les lignes de courant )

    Je m'attaque ensuite à une autre géométrie (pièce1.jpg). J'ai effectivement discrétisé ma pièce en trois parties en utilisant comme critère, la direction principale de la normale de chaque triangle (d'où les 2 couleurs rouge et verte sur la "pièce1.jpg")? Jusqu'ici tout va bien, mais...

    ..., j'utilise maintenant une géométrie de la vraie vie et là, c'est le drame (cf. pièce2.jpg) : impossible d'utiliser la méthode précédente...

    D'où ma question initiale : comment trouver l'équation d'une telle surface à partir du nuage de points et comment définir qu'un segment intersecte (ou n'intersecte pas) cette surface ainsi définie ?
    Images attachées Images attachées    

  5. #5
    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
    Ok c'est plus clair maintenant,

    évidemment la vraie vie, c'est toujours des emmerdes supplémentaires

    En fait ce n'est peut-être pas obligé de trouver une équation pour définir ta surface. Etant donné ce que tu veux faire ensuite (les intersection avec les lignes de courant), tu peux peut-être juste mailler ta structure et définir les intersections entre tes lignes de courant et les éléments de ta structure.

    Bon maintenant si tu préfères passer par l'équation de ta surface :
    - si tu possède la toolbox curve, apparemment la fonction fit te permettrait de bien dégrossir le problème.

    - sinon il va falloir déterminer un modèle de ta surface et estimer les paramètres qui collent au mieux par rapport à ton nuages de points (c'est à dire minimiser l'erreur entre ton modèle et tes données).
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par magelan Voir le message
    En fait ce n'est peut-être pas obligé de trouver une équation pour définir ta surface. Etant donné ce que tu veux faire ensuite (les intersection avec les lignes de courant), tu peux peut-être juste mailler ta structure et définir les intersections entre tes lignes de courant et les éléments de ta structure.
    Mon problème, c'est que je ne connais pas à l'avance mes lignes de courant (elles dépendent de l'écoulement autour de ma pièce) et de plus, je n'ai pas la main sur le maillage...

    Citation Envoyé par magelan Voir le message
    Bon maintenant si tu préfères passer par l'équation de ta surface :
    - si tu possède la toolbox curve, apparemment la fonction fit te permettrait de bien dégrossir le problème.
    Argh !!... Je n'ai pas cette toolbox

    Citation Envoyé par magelan Voir le message
    - sinon il va falloir déterminer un modèle de ta surface et estimer les paramètres qui collent au mieux par rapport à ton nuages de points (c'est à dire minimiser l'erreur entre ton modèle et tes données).
    C'est justement ce que je voudrais faire et aussi, ce que je ne sais pas faire (pas assez fort en maths !..... )

  7. #7
    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
    Citation Envoyé par lybhur Voir le message
    Mon problème, c'est que je ne connais pas à l'avance mes lignes de courant (elles dépendent de l'écoulement autour de ma pièce) et de plus, je n'ai pas la main sur le maillage...



    Argh !!... Je n'ai pas cette toolbox



    C'est justement ce que je voudrais faire et aussi, ce que je ne sais pas faire (pas assez fort en maths !..... )
    Bon ben c'est là que ça se complique, je connais plusieurs méthodes d'ajustements mais je ne les ai jamais utilisé sur des surfaces. Tu peux faire des recherches sur le FE avec les mots-cles suivants :
    bezier, b-spline, nurbs, fit
    j'ai regardé 5 mn et je n'ai rien trouvé de concluant... apparemment pour les courbes il y plein d'outils mais pour les surfaces ça se complique...

    De plus si tu arrives à trouver une équation de ta surface, il y aura un peu de maths à faire pour calculer les intersection entre tes lignes de courant et ta surface.... mais bon avant ça il faut déjà trouvé une approximation de ta surface!
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  8. #8
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Salut!

    Essaye la version 'trial ' de 30 jours que magelan t'avais propose si tu n'as pas 'Curve Fitting Toolbox'.


    Dechargement d'ici:

    http://www.mathworks.com/products/cu...ing/tryit.html

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Bon, je me suis replongé dans les maths et je m'en suis sorti finalement :

    1. Par la méthode des moindres carrées, j'utilise mon nuage de points pour définir les coefficients d'un polynôme de degré n ; par exemple, pour n=2 : z = aX + bY + cXY + dX^2 + eY^2 + fX^2Y + gXY^2 + hX^2Y^2 + i, je détermine les coefficients de a à i.

    2. A partir de ce polynôme, qui est en fait l'équation d'une surface de tendance de ma pièce, je peux savoir si 2 points se situent du même côté de ma pièce ou bien de part et d'autre simplement en injectant les coordonnées de ces 2 points dans l'équation de ma surface de tendance ; si le produit des deux résultats est négatif, alors mes points se situent de part et d'autre de ma pièce !

    Merci à tous ceux qui ont pris un peu de leur temps pour me filer un coup de pouce !!

  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 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par lybhur Voir le message
    1. Par la méthode des moindres carrées, j'utilise mon nuage de points pour définir les coefficients d'un polynôme de degré n ; par exemple, pour n=2 : z = aX + bY + cXY + dX^2 + eY^2 + fX^2Y + gXY^2 + hX^2Y^2 + i, je détermine les coefficients de a à i.
    C'est peu être un peu tard mais sait on jamais => Ajustement aux moindres carrés de courbes et de surfaces
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    C'est exactement ce que j'ai fait sauf que je l'ai généralisé à l'ordre n !...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/12/2011, 19h48
  2. Réponses: 1
    Dernier message: 29/07/2009, 21h23
  3. Interpolation de surface 3D a partir d'un nuage de point (autre que la triangularisation) Matlab
    Par kriskadespe dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 23/07/2009, 17h02
  4. Equation d'un plan à partir d'un nuage de points
    Par Akina SORROW dans le forum Mathématiques
    Réponses: 8
    Dernier message: 15/07/2009, 14h42
  5. Equation d une sphere a partir d un nuage de points
    Par MDiabolo dans le forum Algorithmes et structures de données
    Réponses: 27
    Dernier message: 05/05/2006, 16h40

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