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 !
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 !
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)
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 :/
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)
Il suffit d'attribuer 2 à toutes mes valeurs de x, et de conserver le y en enlevant le z ?
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
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)
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
Et que je refais le code du dessus avec la fonction delaunay puis trimesh cela m'affiche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Tab(:,1) = 2; x=Tab(:,1);
C'est une mauvaise méthode ?Error using delaunay Data point coordinates have inconsistent dimension. Error in MonImplementation (line 52006) tri = delaunay(2,Tab(:,2),Tab(:,3))
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.
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 :
Cela revient à utiliser la fonction delaunay3.
Code : Sélectionner tout - Visualiser dans une fenêtre à part tri = delaunay(Tab(:,1),Tab(:,2),Tab(:,3))
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)
Hum oui d'accord.
Mais quand je vais projeter mes points, il faudra bien les re-trianguler non ?
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)
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.
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)
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 :
Logiquement tous mes points devraient être coplanaire, appartenant au plan x = 2, vu qu'ils ont tous la même abscisseWarning: 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);
Désolé, j'ai entre temps corrigé une erreur de copier/coller dans mon précédent message.
Il faut lire
à la place de
Code : Sélectionner tout - Visualiser dans une fenêtre à part tri = delaunay(y,z);
Essaie simplement ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part tri = delaunay(x,y,z);
Fais tourner le graphique pour aligner les points avec la projection.
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
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)
C'est impec merci.
J'aurai du le trouver par moi-même l'histoire du tri ..
Merci beaucoup
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager