Obsolete (plus d'applets Java)

3D / perspective

Une vue en 3D d'un objet est en fait une projection sur le plan de l'écran d'un objet en 3D.
Nous allons déjà représenter cet objet 3D par ses coordonnées, c'est à dire ses projections sur les plans xOy, xOz et yOz.
En fait deux projections suffisent pour avoir les 3 coordonnées x,y,z

Géométrie descriptive

Ou géométrie de Monge.

Désolé, votre navigateur n'est pas compatible Java Les deux plans xOy Horizontal et xOz Frontal sont superposés sur l'épure.
Un point M dans l'espace est ainsi représenté par deux points liés m et m' sur l'épure.
m est la projection sur le plan horizontal, représenté avec l'axe Ox vers le bas, soit une vue de dessus.
m' sur le plan frontal, représenté avec l'axe Oz vers le haut, soit une vue de face.
L'applet ci-contre montre ainsi un cube, que l'on peut faire tourner autour de son axe vertical.
L'épure (m,m') du point M est draggable (les deux points m et m'), et l'applet affiche les coordonnées (x, y, z) de M. Celles-ci sont obtenues à partir des coordonnées écran de m et m' :

{xym} Coordinates (m,coord,0,0,'')[hidden];
{xym!} Coordinates (m!,coord,0,0,'')[hidden];
{xM} Calculate (0,0,'','#A2!')(xym)[hidden];
{yM} Calculate (0,0,'','#A1')(xym)[hidden];
{zM} Calculate (0,0,'','#A2')(xym!)[hidden];

Les valeurs sont ensuite concaténées par un ConcatText pour l'affichage au format "(x, y, z)"
On notera que lorsque m est au dessus de la ligne de terre yy', x est négatif (le point est derrière le plan frontal)
De même si m' est au dessous de la ligne de terre, z est négatif, M au dessous du plan horizontal.

Nous n'en dirons pas plus sur le sujet (changements de plan, rotations, rabattement, intersections de plan etc. en géométrie descriptive) nous en verrons des exemples au fur et à mesure.

Perspectives cavalières et axonométriques

Il s'agit d'une projection sur le plan de l'écran parallèlement à une direction donnée.
Si la direction de projection est perpendiculaire au plan de l'écran, la perspective est dite "axonométrique", sinon elle est dite "cavalière".
On choisit alors le plan de projection parallèle au plan de face, au besoin après une rotation de l'objet.
Une projection axonométrique nécessite par contre une inclinaison des axes, sinon c'est seulement ... une vue de face !

Désolé, votre navigateur n'est pas compatible Java Considérons ainsi une projection sur le plan frontal, parallèlement à la droite OM, de notre cube ABCDEFGH. Il s'agit de construire les intersections avec le plan frontal des parallèles à OM passant par les sommets du cube.
L'épure d'une telle parallèle est formée de deux droites : une parallèle à om passant par a et une parallèle à om' passant par a'. L'intersection de cette droite avec le plan frontal est obtenue immédiatement :
la parallèle en a coupe la ligne de terre en a" et on renvoie a" en A sur la parallèle en a'.

Une droite "de bout" (perpendiculaire au plan frontal) est ainsi projetée en une parallèle à om' : direction des fuyantes. Elle est réduite dans le rapport k = AD/ad = om'/mm" Ce rapport peut être quelconque, mais généralement entre 0.3 et 0.7, sinon aspect "étrange".
Une parallèle au plan frontal est projetée "en vraie grandeur".

On peut donc construire directement, à translation près, la perspective en gardant inchangées les distances parallèlement au plan frontal de projection, et en reportant les distances "en profondeur" dans la direction des fuyantes, et dans le rapport k.

En plaçant le plan de projection en ABFE, on peut effectuer directement la construction de D par :

{D1} Rotation/MeasuredAngle (B,A,alpha)[hidden];
{D} Dilation/MarkedRatio (D1,A,k);
(pour un cube ad = ab en vue de dessus)

Constructions directes

Enfin la projection conserve les alignements et intersections, et conserve les rapports de distances dans une même direction.
Une construction peut être ainsi effectuée directement sur la vue en perspective, seuls les points de base devant être effectivement projetés.
Bien entendu en ne construisant que selon ces critères "projectifs" (pas d'angles ni de cercles sauf sur un plan de face).
Un cube en perspective cavalière se trace ainsi facilement, à partir du carré ABFE vu de face :

Désolé, votre navigateur n'est pas compatible Java

{ face avant }
{A ... } 
{B ... }
{E} Rotation/MeasuredAngle (B,A, pi/2);
{F} VectorTranslation (B,A,E)];

{ face arrière }
{D1} Rotation/MeasuredAngle (B,A,alpha)[hidden];
{D} Dilation/MarkedRatio (D1,A,k);
{C} VectorTranslation (D,A,B);
{G} VectorTranslation (C,A,E);
{H} VectorTranslation (D,A,E);

{ arêtes }
{AB} Segment (A,B)[red,thick,layer(2)];
{ ... }
Dans l'applet le point draggable M définit α et k, par rapport au vecteur unitaire Ou.

On peut obtenir immédiatement des découpes et intersections sur la vue en perspective
L'applet propose d'inscrire un octaèdre dans le cube en construisant directement les milieux des faces :

{U} Dilation (A,C, 0.5);
{P} Dilation (A,F, 0.5);
{ ... }
{UP} Segment (U,P);
{...}

La construction directe de cercles est possible par des méthodes projectives (tracé d'une conique)
Ainsi un cercle inscrit sur la face BCGF est-il défini comme conique (ellipse) tangente aux côtés en leur milieu.
Ou bien par projection directe du cercle en face avant :

{ cercle sur la face avant}
{Kp} Circle (P,Mab);

{ cercle sur la face latérale }
{t} Point on object (Kp, 0)[hidden];
{tx} Parallel (xx,t)[hidden];
{Xt} Intersect (tx,bf)[hidden];
{xm} Parallel (OM,Xt)[hidden];
{tc} Parallel (ac,t)[hidden];
{Tc} Intersect (tc,xm)[hidden];
{ell} Locus (Tc,t,Kp, 200);
Dans l'applet ci-dessus, le point t est visible et draggable sur le cercle.
D'autres méthodes de tracé de cercle en perspective sont ici moins efficaces, dans le cadre de JavaSketchpad..
Ici la construction échoue si α = 90° (mais bof...) pour cause d'intersections de droites confondues.

Projection axonométrique

Pour éviter des rotations compliquées en géométrie descriptive, on utilisera ici aussi le report des distances x,y,z sur les axes de la projection, dans le rapport voulu. Ici il y a deux directions à définir, et 3 rapports.
La direction verticale est inchangée, mais elle est affectée d'un rapport < 1, car l'axe vertical n'est plus parallèle au plan de projection.
Les trois rapports et les deux angles sont liés par une relation précise.
En appelant α l'angle de la verticale avec le plan de projection et ω l'angle de rotation du repère autour de l'axe vertical, on obtient :

kX = √cos²(ω) + sin²(ω)sin²(α) 
kY = √sin²(ω) + cos²(ω)sin²(α) 
kZ = |cos(α)|

OZ,OX = π/2 + arctan(sin(α)tan(ω))
OZ,OY = π/2 + arctan(sin(α)/tan(ω))

On peut aussi appliquer directement les formules de changement de repère :

x' = x.cos(ω) - y.sin(ω)
y' = -x.sin(ω)sin(α) - y.cos(ω)sin(α) + z.cos(α)
où (x',y') sont les coordonnées sur l'écran, (x,y,z) les coordonnées en 3D

Désolé, votre navigateur n'est pas compatible Java L'applet définit la projection OX, OY des axes (points rouges), et en déduit par les formules ci-dessus les angles α et ω, puis les rapports kX, kY, kZ. Elle construit alors le cube unité sur ces axes.
Une vue en vraie grandeur d'une face du cube est affichée en vert.
Les constructions directe sur la vue en perspective se font comme pour la perspective cavalière.
Ici le cercle inscrit est reporté en copiant les coordonnées (x, y) d'un point courant du repère en vraie grandeur vers le repère affine formé par les côtés du cube en projection :

{ point en vraie grandeur }
{M} Point on object (Kw, 1)[green];
{xyM} Coordinates (M,coord,0,0,'')[hidden];
{xM} Calculate (0,0,'','#A1')(xyM)[hidden];
{yM} Calculate (0,0,'','#A2')(xyM)[hidden];

{ report sur le repère ZB,ZA }
{Xm} Dilation/MarkedRatio (B,Z,xM)[hidden];
{Ym} Dilation/MarkedRatio (A,Z,yM)[hidden];
{Msup} VectorTranslation (Xm,Z,Ym)[yellow];
{Ksup} Locus (Msup,M,Kw, 200);

Le choix des axes projetés OX OY est libre dans certaines limites, sous peine de voire disparaître la projection, ou d'obtenir une déformation irréaliste.
Un renforcement de l'illusion de relief est obtenu ici en traçant en trait fin des arêtes "arrière" du cube, mais ceci est une question de point de vue, et un choix différent des axes donne une vue irréaliste.

 

Accueil Arithmétiques Géométrique Divers Thèmes Scripts Jeux Exercices Sujet précédent Sujet suivant   Parent