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 :

Distance entre points et un plan (inspection)


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Points : 10
    Points
    10
    Par défaut Distance entre points et un plan (inspection)
    Bonjour,
    je vous préviens, je débute dans matlab et connais pas tout le jargon et les astuces...

    j'ai deux données de départ:
    1) un nuage de points 3D, fichier ascii, 3 colonnes (X, Y, Z)
    2) un plan 3D connu (par trois points 3D) sur Autocad, fichier .DXF, possible de ressortir trois points de ce plan 3D.

    ce que je tente de faire: obtenir un listing des écarts (distance) entre les points et le plan 3D, pour ensuite en ressortir les éléments statistiques classiques (moy, max, min, écart type, etc.)

    proposition de méthode:
    Changer le repère, définir un système de coordonnées avec les axes X et Y sur le plan --> on applique cette opération au nuage de points.
    L'altitude des points (coordonnée Z) correspondra en fait à la distance entre le point et le plan.
    Me reste plus qu'à extraire cette coordonnée Z dans un matrice et effectuer mes calculs statistiques classiques.

    Sur matlab : ???

    Pouvez-vous me donner des indices ou exemples pour effectuer ce calcul ?
    merci d'avance pour votre aide.
    ps: j'utilise Matlab 2009a

  2. #2
    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 884
    Points
    52 884
    Par défaut
    Pourquoi tout de suite chercher des astuces ?

    C'est un simple problème d'algorithmique (et de géométrie) :
    • Tu calcules la normale au plan à partir de l'équation du plan et des trois points
    • Tu construis un repère avec une droite quelconque du plan, la normale calculée précédemment et une troisième direction obtenue par produit vectoriel des deux précédentes.
    • Tu construis la matrice de passage P de R0 (repère initiale) vers R1 (repère construit)
    • Tu multiplies les coordonnées des points par P => [x y z] * P
    • Tu testes les nouvelles valeurs de z dans R1


    Et voila, tu peux sortir une feuille de papier et un crayon... pas besoin de MATLAB pour le moment

    PS : commence par le problème en 2D... c'est plus simple
    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)

  3. #3
    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,

    J'ai sûrement raté quelque chose, mais je ne comprend pas pourquoi vous parlez de changement de repère?

    Les distances des points par rapport au plan peuvent être calculé directement à partir des coordonnées des points et du plan...
    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.

  4. #4
    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 884
    Points
    52 884
    Par défaut
    Citation Envoyé par magelan Voir le message
    Les distances des points par rapport au plan peuvent être calculé directement à partir des coordonnées des points et du plan...
    Oui tu as raison... en fait la méthode de changement de repère est efficace quand on cherche à déterminer les points qui sont de part et d'autre du plan (=> distance signée)... ce qui ne semble pas être le cas ici.
    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)

  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
    Citation Envoyé par Dut Voir le message
    Oui tu as raison... en fait la méthode de changement de repère est efficace quand on cherche à déterminer les points qui sont de part et d'autre du plan (=> distance signée)... ce qui ne semble pas être le cas ici.
    Heu, ce n'est pas nécessaire non plus dans le cas que tu cites... On calcule toujours une distance algébrique (donc signée) quel que soit le repère, c'est le fait de prendre la valeur absolue du résultat qui permet d'obtenir une distance non signée...
    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
    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 884
    Points
    52 884
    Par défaut
    Bon, me reste plus qu'à aller réviser ma géométrie niveau collège moi
    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)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    En fait les points sont bien de part et d'autres du plan "doit".
    Je veux analyser la dispersion des points par rapport au plan "doit".

    Je connais l'équation générale d'un plan, je sais qu'il faut en trouver sa normale, puis à partir de là j'ai tout ce qu'il faut pour obtenir la distance d'un point A(Xa,Ya,Za) au plan.

    Mais maintenant c'est bien joli tout ça sur le papier, dans matlab c'est mieux, et le problème c'est que j'ai pas la moindre idée de comment faire ?

    En fait je vise à automatiser les calculs, en fournissant à matlab les éléments suivants:
    a) listing de points xyz
    b) listing de trois points définissant le plan "doit"

    Je fait ensuite un interface pour permettre à l'utilisateur de charger un listing de points xyz et à coté un fichier contenant un listing de 3points définissant un plan.
    ainsi les formules dans matlab doivent êtres totalement dépendantes des données contenues dans ces fichiers. C'est pourquoi je ne veux pas avoir à entrer dans le code de matlab et insérer les coordonnées de trois points du plan à la main au milieu des formules, par exemple.

    J'ai peut être des réflexion fausses (par mon inexpérience dans matlab) mais j'espère que vous aurez compris mon objectif.

  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 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 884
    Points
    52 884
    Par défaut
    Ce n'est donc pas un problème de programmation MATLAB pour le moment mais un problème de conception.

    Ton étude peut se découper en 4 parties indépendantes :
    1. lecture de fichier
    2. calcul des distance
    3. exploitation des résultat (graphique)
    4. interface graphique


    Pour ma part, je ferais dans l'ordre :
    1. calcul des distance
    2. exploitation des résultat (graphique)
    3. lecture de fichier
    4. interface graphique


    Tu développes donc chaque partie l'une après l'autre en effectuant des tests et des validations avant de passer à la partie suivante...
    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)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Voila,
    j'ai l'équation cartésiène du plan "doit", obtenu via des produits scalaires.

    je me retrouve avec un résultat du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    planefunction =
    9*x - 10*y + 31*z - 112
    maintenant j'ai besoin des valeurs a, b, c et d pour les intégrer à la formule de distance entre un point et un plan.

    il me faut donc extraire les valeurs 9, -10, 31 et -112. Puis ensuite je vais les intégrer à la formule suivante:

    dist= ABSOLU( A*Xp+B*Yp+C*Zp+D ) / RACINE(A^2+B^2+C^2).

    Vous savez comment faire pour sortir les valeurs de A B C et D de l'équation du plan, afin de pouvoir les exploiter pour la suite ?
    merci d'avance

  10. #10
    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
    Comment as-tu obtenu l'équation de ton plan? C'est à l'aide d'une fonction matlab? Si oui, laquelle?
    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.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    j'ai défini la normale au plan en utilisant la fonction CROSS
    Ensuite j'ai utilisé la fonction DOT pour faire les produits Scalaires, entre la normale et le plan P=[x,y,z]

  12. #12
    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
    Je suis désolé, mais j'ai du mal à comprendre ce que tu fais...

    Voici comment je procéderais :
    Tu cherches l'équation de ton plan :
    ax+by+cz+d = 0
    or tu as calculé un vecteur normal à ce plan, et les coordonnées de ce vecteur sont précisément les 3 paramètres a, b, et c. (si on appelle le vecteur normal n, on a n =(a,b,c))
    Il ne te reste plus qu'à trouver d en utilisant l'équation de ton plan et un point appartenant à ce plan.
    Ensuite tu pourras calculer les distances des points par rapport au plan en utilisant la formule que tu as donné.
    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.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    merci beaucoup pour votre aide., j'ai pas encore la phylosophie Matlab, mais sa rentre gentillement...

    maintenant je me pose une autre question:
    l'un de vous connais une solution pour obtenir la distance qu'il y a entre les points d'un nuage de points et une surface complexe connue (sous forme de Mesh 3D, plein de triangles collés les uns les autres).

    merci d'avance.

  14. #14
    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,

    pour ta deuxième question, il aurait été mieux de relancer un topic, je pense.

    Tu peux utiliser la solution bête et méchante : calculer tous les couples de distances point-triangle, et garder le minimum...

    pour la distance point-triangle, tu peux partir de la distance point-plan. Si la projection du point sur le plan est à l'intérieur du triangle, c'est ok. Sinon, il faut calculer la distance à la plus proche arête ou au plus proche sommet.

    Sinon tu as une fonction qui fait ça sur le site d'échange de Mathworks :
    http://www.mathworks.com/matlabcentr...exchange/22857
    j'ai pas testé...

    A+

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    super ! merci beaucoup
    on peut dire que le sujet est résolu.

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

Discussions similaires

  1. Calcule de distance entre point d'un JFreeChart
    Par SLAMADHOUHA dans le forum 2D
    Réponses: 1
    Dernier message: 06/07/2015, 09h10
  2. Distance entre point et largeur d'un rectangle
    Par mielle dans le forum Mathématiques
    Réponses: 26
    Dernier message: 19/10/2013, 20h41
  3. Distance entre points et un triangle
    Par azzami2007 dans le forum Mathématiques
    Réponses: 6
    Dernier message: 06/10/2012, 11h00
  4. Calcul de distance entre points
    Par yoshï dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 13/01/2011, 12h35
  5. distance minimale entre point et plan
    Par mar1985 dans le forum Mathématiques
    Réponses: 1
    Dernier message: 22/06/2009, 22h31

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