Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 09-03-2023 15:03:40
- Blubber
- Membre
- Inscription : 15-02-2023
- Messages : 76
Projeter une figure 3D sur un écran 2D
Bonjour,
Je suis actuellement entrain d'essayer de projeter une figure 3D (quelconque) sur un plan en 2D avec MetaPost pour mes cours (et aussi pour le défi, j'avoue). Simplement, MetaPost n'ayant de support intégré pour les matrices ni même pour la 3D j'aimerais essayer de m'en passer (histoire de ne pas avoir à m'en soucier et me tuer à la tache pour tricher avec MetaPost).
Pour ce faire, la priorité est (selon moi) de pouvoir réaliser des rotations sur les trois axes $x$, $y$ et $z$ puis d'enfin réaliser les projections.
Commençons donc par nous chauffer avec des rotations 2D à l'aide de la matrice $$\begin{pmatrix}\cos(\theta)&-\sin(\theta)\\\sin(\theta)&\cos(\theta)\end{pmatrix}$$ Deux choix s'offrent à nous:
Créer une base $(e_0,e_1)$ de telle sorte que nos coordonnées sont obtenues à partir de cette base; auquel cas
$$\left\{\begin{array}{lll}e_0 & = & (\cos(\theta),\sin(\theta)) \\e_1 & = & (-\sin(\theta), \cos(\theta))\end{array}\right.$$Créer une fonction rotation, pour cela, on "transforme" notre matrice de sorte à obtenir un vecteur avec les coordonnées suivantes:
$$\left\{\begin{array}{lll}x' & = & x\cos(\theta)-y\sin(\theta) \\y' & = & x\sin(\theta)+y\cos(\theta)\end{array}\right.$$
ainsi, notre fonction devrait ressembler à ceci :
def rotation(expr a, theta) =
((xpart a)*cosd(theta) - (ypart a)*sind(theta),
(xpart a)*sind(theta) + (ypart a)*cosd(theta))
enddef ;
Bref, ceci est simple et fonctionne très bien.
Maintenant là où je commence à coincer c'est que j'aimerais pouvoir créer aussi bien une base que la fonction rotation en 3D pour les trois axes. Wikipedia nous dit qu'il nous faut multiplier les trois matrices suivantes :
$$R_x=\begin{pmatrix}1&0&0\\0&\cos(\alpha)&-\sin(\alpha)\\0&\sin(\alpha)&\cos(\alpha)\end{pmatrix} \qquad R_y=\begin{pmatrix}\cos(\beta)&0&\sin(\beta)\\0&1&0\\-\sin(\beta)&0&\cos(\beta)\end{pmatrix} \qquad R_z=\begin{pmatrix}\cos(\gamma)&-\sin(\gamma)&0\\\sin(\gamma)&\cos(\gamma)&0\\0&0&1\end{pmatrix}$$
Soit, après calcul (merci wolframalpha)
sauf, qu'à nouveau, il n'est pas possible d'utiliser de la 3D out-of-the-box on se retrouve donc, enfin, à devoir utiliser la projection orthogonale en ne gardant pas les valeurs en $z$ (on retire donc la dernière ligne de notre matrice).
Ainsi, pour une rotation de $45\deg$ sur tous les angles ($\alpha$, $\beta$, $\gamma$) pour un repère orthonormé j'obtiens le résultat suivant :
Cela parait-il crédible ou bien me suis-je loupé ?
Hors ligne
#2 09-03-2023 17:21:37
- Blubber
- Membre
- Inscription : 15-02-2023
- Messages : 76
Re : Projeter une figure 3D sur un écran 2D
Petite modification, je suis passé sur les angles d'euler qui me sont un peu plus naturel.
Deuxième partie donc, on se doit de projeter correctement nos coordonnées pour cela, rien de plus simple, il nous faut juste une fonction projection telle que celle-ci
vardef pr(expr x, y, z) =
x*e[0] + y*e[1] + z*e[2]
enddef ;
J'obtiens donc pour $\psi=0, \theta=280, \phi=225$ ceci
Il me reste tout de même (pour l'instant) deux questionnements :
Quelles sont les valeurs d'angles utilisées pour obtenir la disposition en noir sur cette image ?
Je me casse la tête à écrire une base puis à réaliser une projection dans cette base… peut-être y a-t-il moyen de faire ça plus directement ? (de loin j'imagine que ça utiliserait les produits scalaires et vectoriels ? Mais je ne vois pas trop comment)
Hors ligne
#3 20-04-2023 18:22:27
- Bernard-maths
- Membre Expert
- Lieu : 34790 Grabels
- Inscription : 18-12-2020
- Messages : 1 862
Re : Projeter une figure 3D sur un écran 2D
Bonsoir Blubber !
Je viens de retrouver un vieux programme en GeoGebra, datant de 2008, avant que GeoGebra en 3D soit disponible.
Avec 2 curseurs pour les angles, on fait tourner un cube ... Il y a toutes les formules sur les coordonnées !
Si tu veux, je te l'envoie, et tu te débrouilles avec ... ?
Bernard-maths
Dernière modification par Bernard-maths (20-04-2023 18:22:44)
Hors ligne
#4 20-04-2023 22:46:45
- Blubber
- Membre
- Inscription : 15-02-2023
- Messages : 76
Re : Projeter une figure 3D sur un écran 2D
Bonsoir Bernard-maths.
Je suis en effet intéressé par ce programme GeoGebra ! :)
Je pense que je serais à même de me débrouiller avec afin d'essayer d'en tirer le plus de choses possibles.
Merci d'avance. :)
Hors ligne
#5 22-04-2023 10:49:05
- Bernard-maths
- Membre Expert
- Lieu : 34790 Grabels
- Inscription : 18-12-2020
- Messages : 1 862
Re : Projeter une figure 3D sur un écran 2D
Bonjour Blubber ! Et les autres !
Donc, vers 2008 (ou un peu avant), lorsque GeoGebra n'était pas encore en 3D, j'ai développé un module permettant de représenter en 2D une figure (ici des polyèdres) définie en 3D. ET de la faire tourner, grâce à 2 curseurs ... L'image est la projection de cette figure 3D.
J'ai procédé en plusieurs étapes (que je n'ai pas documentées !), et ici je vous donne la 1ère étape, puis une dernière plus élaborée.
La première représente un cube de sommets (+-1;+-1;+-1) ... Les 2 curseurs sont des ellipses qu'on peut parcourir grâce à un point V1 ou W1), sans être limité par les bornes d'un curseur "standard".
Evidemment la gestion de ces curseurs amène "du monde" dans la feuille !
Sur le dessin ci-joint, on voit à droite le bloc de 2 ellipses, et la figure à gauche. On voit aussi tous les points "en plus" !
Le programme est le suivant : Y'A UN OS sur les adresses ??? Avez-vous un problèmes ???
https://www.cjoint.com/c/MDwjyIdacil
https://www.cjoint.com/doc/23_04/MDwjyI … -faces.ggb
J'attend une réponse ...! La suite après ...
Bernard-maths
Dernière modification par Bernard-maths (22-04-2023 11:06:31)
Hors ligne
#6 22-04-2023 12:00:29
- Blubber
- Membre
- Inscription : 15-02-2023
- Messages : 76
Re : Projeter une figure 3D sur un écran 2D
Bonjour Bernard-maths.
J'ai pu télécharger le fichier GeoGebra et le lancer sans soucis.

J'essaierai donc à présent de comprendre ce qu'il s'y passe bien qu'un peu de contexte ne serait pas de refus. x')
Hors ligne
#7 22-04-2023 12:39:49
- Blubber
- Membre
- Inscription : 15-02-2023
- Messages : 76
Re : Projeter une figure 3D sur un écran 2D
Je crois que je commence à comprendre comment cela fonctionne.
La projection de chaque point est déterminée par ses coordonnées listées dans la barre à gauche (par exemple $B$ est déterminé par $(x_B, y_B)$ et chacune de ces coordonnées est explicitement définie (par exemple $y_B=z_{B} c_{\beta}-(x_{B} c_{\alpha}-y_{B} s_{\alpha}) s_{\beta}$) avec le cosinus ($c$) et le sinus ($s$) de $\alpha$ et $\beta$.
Dernière modification par Blubber (22-04-2023 12:40:38)
Hors ligne
#8 22-04-2023 12:41:40
- Bernard-maths
- Membre Expert
- Lieu : 34790 Grabels
- Inscription : 18-12-2020
- Messages : 1 862
Re : Projeter une figure 3D sur un écran 2D
Bonjour !
Oui, j'ai des problèmes avec mon ordi ...
Alors je vais essayer de reprendre ce que j'ai fait, mais c'est vieux !
Et en ce moment je suis très fatigué, alors cool !
Cette application n'utilise QUE 2 rotations ... ce n'est pas ton problème posé ! Mais je pense que cela revient "presque" au même ???
Tout dépend de ce que tu veux obtenir ... soit disposer d'un objet (le cube) et le faire tourner pour le voir dans n'importe quelle position, ou presque, et là mon programme convient ;ou bien pouvoir le faire tourner selon 3 axes, et là c'est tes calculs qu'il faut continuer !
Bernard-maths
Hors ligne
#9 22-04-2023 12:44:46
- Bernard-maths
- Membre Expert
- Lieu : 34790 Grabels
- Inscription : 18-12-2020
- Messages : 1 862
Re : Projeter une figure 3D sur un écran 2D
Suite des programmes :
Puisque les liens fonctionnent, je joins un 2ème programme gérant les faces cachées, pour un polyèdre CONVEXE, après c'est plus dur ...
Et les liens :
https://www.cjoint.com/c/MDwjz3EmYzl
https://www.cjoint.com/doc/23_04/MDwjz3 … bles-2.ggb
Même principe, mais en plus (c'est en couleur :-)) les faces cachées ne sont pas affichées : l'effet de voir en 3D est bon !
Je reviendrai sur la programmation ...
Le programme fait passer d'un cube de côté 2 à son octaèdre dual (interne), et vice-versa avec le cube "côté carré" ... affiché.
Sur la figure est affichée la liste des quadrilatères, verts ou jaunes, et on voit ceux qui sont affichés ou non. On peut ouvrir la liste des triangles rouges, et on verra aussi pour eux ! En faisant tourner la figure, on voit les changements d'affichage en direct ...
Bon amusement.
A plus, Bernard-maths
Dernière modification par Bernard-maths (22-04-2023 12:53:44)
Hors ligne
#10 22-04-2023 13:07:02
- Blubber
- Membre
- Inscription : 15-02-2023
- Messages : 76
Re : Projeter une figure 3D sur un écran 2D
Ne te presse pas Bernard-maths, car moi je ne suis pas pressé ! :)
Pour tout te dire, à vouloir y aller directement avec trois axes je me suis perdu en chemin. Ainsi je pense qu'y aller incrémentalement et commencer par deux axes afin de déjà réaliser cette projection sur ceux-ci serait un grand bon en avant : d'une part j'arriverais à mettre ceci en place mais en plus j'aurais de quoi réaliser la quasi-totalité des figures que je pourrais espérer.
Il manquerait tout de même la possibilité de réaliser des figures en, notamment, sciences de l'ingé ; néanmoins je crois que ceci ne se fera qu'une fois que je serai arrivé à tout faire sur deux axes. Je m'attaquerais alors surement à une généralisation sur trois axes mais clairement, c'est plus compliqué que prévu à mettre correctement en place sans se perdre dans des calculs et des fonctions alambiquées.
En tout cas je te remercie (d'autant plus si tu veux bien m'expliquer un peu le côté programmation un peu plus tard. À nouveau, ne te presse pas tu peux l'expliquer d'ici quelques jours sans soucis :)) car je sens qu'avec ces deux fichiers je vais m'amuser comme un petit fou durant tout le weekend ! ^^
Hors ligne
#11 22-04-2023 16:58:21
- Bernard-maths
- Membre Expert
- Lieu : 34790 Grabels
- Inscription : 18-12-2020
- Messages : 1 862
Re : Projeter une figure 3D sur un écran 2D
Bonjour !
Pas pressé ... cool donc, mais moi je cogite, ça me distrait ...
Donc je repense à la méthode employée, et je pense à un truc du genre : pour une figure "centrée" en O origine du repère, 1ère rotation autour de (x'x) pour "l'inclinaison", 2ème rotation autour de (z'z) pour faire tourner ...
Ensuite projection sur le plan (yOz), puis pour avoir l'image dans un repère 2D en x y, on fait tourner les coordonnées de la projection, z devient y, et y devient x, tour de magie terminé !
Mais il y a d'autres variantes ... Voilà pour l'organisation.
Petite remarque sur GeoGebra : je travaille avec GeoGebra Classique 5, et non 6 ! L'environnement est plus simple, question de goût ...
Lors de l'ouverture du lien, c'est le 6 qui est chargé ! Si tu veux le 5, tu peux le télécharger (en bas) sur https://www.geogebra.org/download
Celui-ci n'est pas "lançable", dommage.
Bernard-maths
Dernière modification par Bernard-maths (22-04-2023 16:59:57)
Hors ligne
#12 19-05-2023 10:52:47
- Bernard-maths
- Membre Expert
- Lieu : 34790 Grabels
- Inscription : 18-12-2020
- Messages : 1 862
Re : Projeter une figure 3D sur un écran 2D
Bonjour à tous !
Alors Blubber, où en es tu ?
Un petit coup d'oeil sur Wiki ? https://fr.wikipedia.org/wiki/Matrice_de_rotation
B-m
Dernière modification par Bernard-maths (19-05-2023 10:53:26)
Hors ligne
#13 19-05-2023 15:49:17
- Blubber
- Membre
- Inscription : 15-02-2023
- Messages : 76
Re : Projeter une figure 3D sur un écran 2D
Bonjour Bernard-maths.
Ces dernières semaines j'ai surtout bossé les exams (auxquels je n'accepterai pas moins de 19/20 x')) mais tout en continuant d'avancer sur le présent sujet.
Je suis en train d'essayer de mettre en forme tout ceci afin d'avoir une sorte le library simple et facilement utilisable ; bien que très limitée. En effet, je ne cherche pas à faire un monstre adapté à toutes les situations mais bien un petit helper répondant juste à mon use-case. Sache que tes programmes GeoGebra m'ont été d'un grand secours aussi bien pour visualiser correctement la chose que pour voir comment appliquer les formules.
Enfin, lorsque j'aurais réussi à rendre le tout suffisamment bien à mon gout, je mettrai tout ceci en accès libre des fois que cela en intéresse certains.
Hors ligne
Pages : 1









