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 :

Projection orthogonale


Sujet :

MATLAB

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

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 18
    Points
    18
    Par défaut Projection orthogonale
    Bonjour,

    Existe-t-il une fonction projection orthogonale sous Matlab ? Je voudrais projeter une figure 3D triangulée sur un plan, ma figure est en face du plan. Il faudrait donc que je projette chaque triangles sur ce plan.

    Merci d'avance !

  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 : 53 160
    Points
    53 160
    Par défaut
    Il n'y a rien de vraiment compliqué.

    Le point projeté se trouve à une distance d du point initiale suivant la normale au plan. Tu peux donc écrire ses coordonnées en fonction des coordonnées du point initiale et du vecteur normal au plan.

    De plus, le point projeté appartient au plan. Ses coordonnées écrites précédemment vérifient donc l'équation du plan. Ce qui devrait te donner d

    Et : http://fr.wikipedia.org/wiki/Project...ion_analytique

    C'est pareil en 2D avec la projection orthogonale d'un point sur une droite.
    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
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Par rapport à la projection affine de ton lien. Si je dispose de l'équation cartésienne de mon plan, mon équation de droite suivant laquelle sera la direction de la projection peut être prise arbitrairement ?

    Si mon objet (non symétrique) est centré en (0,0,0) et que mon plan est par exemple x = 2, comment je peux choisir mon équation de droite ?

    Par ailleurs je ne connais pas les coordonnées d'aucun des points projetés :/

  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 : 53 160
    Points
    53 160
    Par défaut
    Reprends la cas 2D pour bien comprendre : http://fr.wikipedia.org/wiki/Project...rie_analytique

    Sinon, si l'équation du plan est x=2, il suffit d'attribuer la valeur 2 à toutes les abscisses des points à projeter. Il n'y a aucun calcul à faire.
    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
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Il suffit d'attribuer 2 à toutes mes valeurs de x, et de conserver le y en enlevant le z ?

  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 : 53 160
    Points
    53 160
    Par défaut
    C'est beaucoup plus simple qu'il n'y parait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    n =40;
    [x,y,z] = sphere(n);
     
    figure
    surf(x,y,z)
    hold on
     
    x(:) = 2;
     
    surf(x,y,z)
     
    axis equal
    Images attachées Images attachées  
    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
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Voici mon script pour l'affichage de l'objet triangulé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    x=Tab(:,1);
    y=Tab(:,2);
    z=Tab(:,3);
     
     
    figure
    tri = delaunay(Tab(:,1),Tab(:,2),Tab(:,3))
    B = trimesh(tri,x,y,z);
    axis equal

    Si je mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Tab(:,1) = 2;
    x=Tab(:,1);
    Et que je refais le code du dessus avec la fonction delaunay puis trimesh cela m'affiche :

    Error using delaunay
    Data point coordinates have inconsistent dimension.
    
    Error in MonImplementation (line 52006)
    tri = delaunay(2,Tab(:,2),Tab(:,3))
    C'est une mauvaise méthode ?

    Dans ce que tu m'as dis, que represente le petit N ? Sachant que j'ai 22272 points qui composent les 7424 triangles. Je cherche à les projeter sur mon paln x = 2.

  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 : 53 160
    Points
    53 160
    Par défaut
    Euh... sans vouloir paraitre méchant, tu sembles faire un peu n'importe quoi la.

    Tu as un nuage de points 3D dont les coordonnées sont stockées dans la variable Tab.

    Si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tri = delaunay(Tab(:,1),Tab(:,2),Tab(:,3))
    Cela revient à utiliser la fonction delaunay3.
    tri représente la table de connectivité de tétraèdres, non plus de triangles.
    Tu peux vérifier que c'est un tableau de dimension Mx4
    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
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Hum oui d'accord.

    Mais quand je vais projeter mes points, il faudra bien les re-trianguler non ?

  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 : 53 160
    Points
    53 160
    Par défaut
    Prenons un exemple tout simple.

    Supposes que tu n'as que 3 points dans ton nuage.

    La tabe de connectivité Tab serait [1 2 3]

    A ton avis, cette table de connectivité est -elle dépendante des coordonnées des points ?
    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
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Disons qu'elle est là pour nous dire quels sont les trois sommets de chaque triangles non ?

  12. #12
    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 : 53 160
    Points
    53 160
    Par défaut
    Citation Envoyé par Abc0123 Voir le message
    Disons qu'elle est là pour nous dire quels sont les trois sommets de chaque triangles non ?
    Oui, mais elle peut ne pas changer si tu ne fais que modifier les coordonnées des points (projection).

    Il y aura surement des chevauchement mais tout dépend de ce que tu veux en sortie. Si c'est une simple représentation d'une ombre par exemple, il n'y aura pas beaucoup d'erreurs.

    Citation Envoyé par Abc0123 Voir le message
    Mais quand je vais projeter mes points, il faudra bien les re-trianguler non ?
    Dans ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    x = Tab(:,1);
    y = Tab(:,2);
    z = Tab(:,3);
     
    x(:) = 2;
     
    tri = delaunay(y,z);
     
    figure
     
    B = trimesh(tri,x,y,z);
     
    axis equal
    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)

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Hum d'accord, c'est à peu près ce que j'avais fais tout à l'heure, et matlab me ressort le même message d'erreur :

    Warning: Duplicate data points have been detected and removed.
     Some point indices will not be referenced by the triangulation. 
    > In Implementation at 52004 
    Error using delaunay
    Error computing the Delaunay triangulation. The points may be coplanar or collinear.
    
    Error in Implementation (line 52004)
    tri = delaunay(x,y,z);
    Logiquement tous mes points devraient être coplanaire, appartenant au plan x = 2, vu qu'ils ont tous la même abscisse

  14. #14
    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 : 53 160
    Points
    53 160
    Par défaut
    Désolé, j'ai entre temps corrigé une erreur de copier/coller dans mon précédent message.

    Il faut lire

    à la place de

    Essaie simplement ceci :

    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
    18
    x = rand(5,1);
    y = rand(5,1);
    z = rand(5,1);
     
    tri = delaunay(y,z);
     
    figure(1)
    clf
     
    plot3(x,y,z,'r*')
    hold on
     
    x(:) = 2;
     
    trimesh(tri,x,y,z);
     
    axis equal
    grid on
    Fais tourner le graphique pour aligner les points avec la projection.
    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)

  15. #15
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    C'est impec merci.

    J'aurai du le trouver par moi-même l'histoire du tri ..

    Merci beaucoup

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/06/2014, 20h27
  2. [OPENGL] fenêtre 2d en 3d sans projection orthogonale
    Par SirDavik dans le forum OpenGL
    Réponses: 9
    Dernier message: 25/12/2008, 22h57
  3. projection d'une image orthogonalement a sa direction
    Par solitair dans le forum Images
    Réponses: 4
    Dernier message: 23/05/2008, 13h10
  4. Projection orthogonale et 3D classique
    Par Heliopraetor dans le forum DirectX
    Réponses: 2
    Dernier message: 07/03/2008, 12h46
  5. Clipping et projection orthogonale
    Par Luke-77 dans le forum DirectX
    Réponses: 4
    Dernier message: 01/10/2003, 21h02

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