Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
tutoriaux:3d-theories-et-mathematiques-part-2 [2021/05/03 02:20] – créée frater | back2root:programmation:3d-theories-et-mathematiques-part-2 [2023/01/07 11:01] (Version actuelle) – ↷ Liens modifiés en raison d'un déplacement. frater | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== | + | ====== 3D : Théories et Mathématiques - PART 2 ====== |
- | ===== Introduction ===== | ||
- | |||
- | Petite piqûre de rappel; le calcul en 3 dimension n’est pas plus compliqué que le calcul en 2 (ou en 1) dimension, tous le monde est capable d' | ||
- | |||
- | Le calcul en 1 dimension est en fait le calcul d’algèbre classique, que vous faites tous les jours en faisant vos courses par exemple. | ||
- | |||
- | Le calcul en 2 dimension est de la géométrie simple, rappelez vous les translations, | ||
- | |||
- | Malheureusement, | ||
- | |||
- | ===== Système de références ===== | ||
- | |||
- | Tout est une question de références, | ||
- | |||
- | ==== Le système cartésien ==== | ||
- | |||
- | Sans doute le plus simple a comprendre car le plus proche de notre mode « mathématique ». | ||
- | |||
- | Une coordonnée est exprimée « simplement » avec avec trois coordonnées : x, y, z | ||
- | |||
- | === Radian vs Degré === | ||
- | |||
- | Très souvent, dans les fonctions de trigonométriques informatiques, | ||
- | |||
- | un radian est une valeur réel, alors qu'un degré d' | ||
- | |||
- | Notre cerveau a plus facile a manipuler la notion même de degré d' | ||
- | |||
- | pourtant, il est impératif d' | ||
- | |||
- | <WRAP center round box 60%>< | ||
- | |||
- | Donc 1 radian vaut +/- 57.2958 degré d' | ||
- | |||
- | <WRAP center round box 60%>< | ||
- | |||
- | Les formules de conversion sont donc les suivantes: | ||
- | |||
- | == degré -> radian == | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14>x radian = angle * (eta/ | ||
- | </ | ||
- | |||
- | |||
- | == radian -> degré == | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14>x degre = rad * (180/ | ||
- | </ | ||
- | |||
- | |||
- | === le système sphérique === | ||
- | |||
- | C’est le système qui est utilisé pour la géolocalisation ou la définition d’objets céleste ; on parle de coordonnées angulaire (appelées latitude et longitude dans la géolocalisation) et d’un rayon (l’altitude pour ce qui est de la géolocalisation, | ||
- | |||
- | Une coordonnée est exprimée avec un rayon r et deux angles : r, <m 13> | ||
- | |||
- | === le système cylindrique === | ||
- | |||
- | Ce système est le moins rependu, et souvent utilisé pour pour l’étude de mouvements hélicoïdaux ou en rotation autour d’un axe. | ||
- | |||
- | Une coordonnée est exprimée via deux angles : <m 13> | ||
- | |||
- | === Conversions entre systèmes de références === | ||
- | |||
- | == Sphérique → Cartésien == | ||
- | |||
- | <WRAP center round box 60%> | ||
- | |||
- | <m 13>x = r * sin (theta) * cos (phi)</ | ||
- | |||
- | <m 13>y = r * sin (theta) * cos (phi)</ | ||
- | |||
- | <m 13>z = r * cos (theta)</ | ||
- | </ | ||
- | |||
- | |||
- | == Cylindrique → Cartésien == | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 13>x = rho cos(phi)</ | ||
- | |||
- | <m 13>y = rho sin(phi)</ | ||
- | |||
- | <m 13>z = z</m> | ||
- | </ | ||
- | |||
- | |||
- | ===== Calculs et matrices ===== | ||
- | |||
- | En calcul 3D, le calcul matriciel la méthode la plus simple pour résoudre les transformations que l'on veut appliquer. | ||
- | |||
- | De plus, les opérations nécessaires se limitent surtout à deux opérations majeurs : la multiplication des matrices (produit matriciel) et l' | ||
- | |||
- | Pour additionner 2 matrices, il s’agit de faire la somme de leurs membres: | ||
- | | ||
- | <WRAP center round box 60%> | ||
- | <m 14> | ||
- | </ | ||
- | |||
- | Pour la multiplication, | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14> | ||
- | delim{|}{matrix{2}{2}{a1 b1 a2 b2}}{|} * | ||
- | delim{|}{matrix{2}{2}{c1 d1 c2 d2}}{|} = | ||
- | delim{|}{matrix{2}{2}{(a1*c1)+(b1*c2) (a1*d1)+(b1*d2) (a2*c1)+(b2*c2) (a2*d1)+(b2*d2)}}{|}</ | ||
- | </ | ||
- | |||
- | ==== Note sur la multiplication par 1 ==== | ||
- | |||
- | Dans un calcul simple, quand on multiplie n' | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14>x prime = x * 1 </m> | ||
- | </ | ||
- | |||
- | |||
- | et donc x' = x | ||
- | |||
- | En calcul matriciel , la valeur ' | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14> | ||
- | </ | ||
- | |||
- | |||
- | Pour des questions pratiques, je ne me pencherais que sur le système cartésien, plus lisible et surtout plus commun, mais sachez qu’il est tout a fait possible de convertir une carte de la galaxie (qui est trouvable en coordonnées sphérique) dans un système cartésien: | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14> | ||
- | </ | ||
- | |||
- | et, ainsi la multiplication d'une matrice par ' | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14> | ||
- | delim{|}{matrix{3}{1}{x y z}}{|} = | ||
- | delim{|}{matrix{3}{1}{x y z}}{|} * | ||
- | delim{|}{matrix{3}{3}{1 0 0 0 1 0 0 0 1}}{|}</ | ||
- | </ | ||
- | |||
- | |||
- | Comme tous les langages de programmations n' | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14>x prime = (x*1) + (y*0) + (z*0)</ | ||
- | |||
- | <m 14>y prime = (x*0) + (y*1) + (z*0)</ | ||
- | |||
- | <m 14>z prime = (x*0) + (y*0) + (z*1)</ | ||
- | </ | ||
- | |||
- | |||
- | Ce qui dans ce cas précis peut s' | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14>x prime = x * 1</m> | ||
- | |||
- | <m 14>y prime = y * 1</m> | ||
- | |||
- | <m 14>z prime = z * 1</m> | ||
- | </ | ||
- | |||
- | ==== Coordonnées homogènes ==== | ||
- | |||
- | Toutefois, pour pouvoir correctement appliquer certaines transformations (notamment la translation), | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14> | ||
- | delim{|}{matrix{4}{4}{ | ||
- | 1 0 0 0 | ||
- | 0 1 0 0 | ||
- | 0 0 1 0 | ||
- | 0 0 0 1}}{|} | ||
- | </m> | ||
- | </ | ||
- | |||
- | Ce qui peut se traduire simplement : | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14>x prime = (x*1) + (y*0) + (z*0) + (w*0)</ | ||
- | |||
- | <m 14>y prime = (x*0) + (y*1) + (z*0) + (w*0)</ | ||
- | |||
- | <m 14>z prime = (x*0) + (y*0) + (z*1) + (w*0)</ | ||
- | |||
- | <m 14>w prime = (x*0) + (y*0) + (z*0) + (w*1)</ | ||
- | </ | ||
- | |||
- | Ou encore en mode " | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14>x prime = x * 1</m> | ||
- | |||
- | <m 14>y prime = y * 1</m> | ||
- | |||
- | <m 14>z prime = z * 1</m> | ||
- | |||
- | <m 14>w prime = w * 1</m> | ||
- | </ | ||
- | |||
- | En résumé, un produit matriciel d'une matrice point " | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14> | ||
- | delim{|}{matrix{4}{1}{ nx ny nz nw}}{|} = | ||
- | delim{|}{matrix{4}{1}{ x y z w}}{|} * | ||
- | delim{|}{matrix{4}{4}{ | ||
- | xa xb xc xd | ||
- | ya yb yc yd | ||
- | za zb zc zd | ||
- | wa wb wc wd | ||
- | }}{|} | ||
- | </m> | ||
- | </ | ||
- | |||
- | Et se résous avec les équations suivantes: | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14>x prime = (x*xa) + (y*xb) + (z*zb) + (w*xd)</ | ||
- | |||
- | <m 14>y prime = (x*ya) + (y*yb) + (z*yb) + (w*yd)</ | ||
- | |||
- | <m 14>z prime = (x*za) + (y*zb) + (z*zb) + (w*zd)</ | ||
- | |||
- | <m 14>w prime = (w*wa) + (w*wb) + (w*wb) + (w*wd)</ | ||
- | </ | ||
- | |||
- | On constate immédiatement que l' | ||
- | |||
- | ===== Transformations ===== | ||
- | |||
- | Tout ensemble de transformations géométrique doit se faire dans un certain ordre qu'il convient de décider à l' | ||
- | |||
- | Une rotation suivit d'une translation et d'un changement d' | ||
- | |||
- | Sans compter qu'il existe des transformations "plus fun" comme le scissaillement ou le mirroir suivant un plan... | ||
- | |||
- | Dans cette je ne fournirais que les matrices (et leurs traductions sans optimisation). | ||
- | |||
- | ====== Les changement d' | ||
- | |||
- | Sans doute la matrice la plus simple, la matrice de transformation d' | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14> | ||
- | delim{|}{matrix{4}{4}{ | ||
- | ex 0 0 0 | ||
- | 0 ey 0 0 | ||
- | | ||
- | | ||
- | }}{|}</ | ||
- | </ | ||
- | |||
- | On peut soit avoir une même échelle pour tout les axes : ex = ey = ez = échelle ou faire un changement d' | ||
- | |||
- | Voici les formules a appliquer si l'on désire transformer un point particulier: | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14>x prime = (x*ex) + (y* 0) + (z* 0) + (w* 0)</ | ||
- | |||
- | <m 14>y prime = (x* 0) + (y*ey) + (z* 0) + (w* 0)</ | ||
- | |||
- | <m 14>z prime = (x* 0) + (y* 0) + (z*ez) + (w* 0)</ | ||
- | |||
- | <m 14>w prime = (x* 0) + (y* 0) + (z* 0) + (w* 1)</ | ||
- | </ | ||
- | ====== Translation ====== | ||
- | |||
- | Si il existe une transformation souvent sous estimée, c'est bien celle-ci, le déplacement d'un point dans l' | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14> | ||
- | delim{|}{matrix{4}{4}{ | ||
- | | ||
- | | ||
- | | ||
- | tx ty tz 1 | ||
- | }}{|}</ | ||
- | </ | ||
- | |||
- | Voici les formules a appliquer si l'on désire transformer un point particulier: | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14>x prime = (x* 1) + (y* 0) + (z* 0) + (w*tx)</ | ||
- | |||
- | <m 14>y prime = (x* 0) + (y* 1) + (z* 0) + (w*ty)</ | ||
- | |||
- | <m 14>z prime = (x* 0) + (y* 0) + (z* 1) + (w*tz)</ | ||
- | |||
- | <m 14>w prime = (x*tx) + (y*ty) + (z*tz) + (w* 1)</ | ||
- | </ | ||
- | |||
- | Rappelez vous que w = 1, et donc nos formules peuvent se traduire par: | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14>x prime = x+tx</ | ||
- | |||
- | <m 14>y prime = y+ty</ | ||
- | |||
- | <m 14>z prime = z+tz</ | ||
- | </ | ||
- | |||
- | Ce qui doit normalement vous rappeler des souvenirs. | ||
- | |||
- | ====== Réflexion par rapport à un axe ====== | ||
- | |||
- | Avec cette transformation, | ||
- | |||
- | Le plan de " | ||
- | |||
- | Effet miroir par rapport au plan x/y (chaque coordonnée ' | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14> | ||
- | delim{|}{matrix{4}{4}{ | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | </m> | ||
- | </ | ||
- | |||
- | Voici les formules a appliquer si l'on désire transformer un point particulier: | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14>x prime = (x* 1) + (y* 0) + (z* 0) + (w* 0)</ | ||
- | |||
- | <m 14>y prime = (x* 0) + (y* 1) + (z* 0) + (w* 0)</ | ||
- | |||
- | <m 14>z prime = (x* 0) * (y* 0) * (z*-1) + (w* 0)</ | ||
- | |||
- | <m 14>w prime = (x* 0) + (y* 0) + (z* 0) + (w* 1)</ | ||
- | </ | ||
- | |||
- | |||
- | Effet miroir par rapport au plan x/z (chaque coordonnée ' | ||
- | <WRAP center round box 60%> | ||
- | <m 14> | ||
- | delim{|}{matrix{4}{4}{ | ||
- | | ||
- | 0 (-1) 0 0 | ||
- | | ||
- | | ||
- | </m> | ||
- | </ | ||
- | |||
- | Voici les formules a appliquer si l'on désire transformer un point particulier: | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14>x prime = (x* 1) + (y* 0) + (z* 0) + (w* 0)</ | ||
- | |||
- | <m 14>y prime = (x* 0) + (y*-1) + (z* 0) + (w* 0)</ | ||
- | |||
- | <m 14>z prime = (x* 0) * (y* 0) * (z* 1) + (w* 0)</ | ||
- | |||
- | <m 14>w prime = (x* 0) + (y* 0) + (z* 0) + (w* 1)</ | ||
- | </ | ||
- | |||
- | Effet miroir par rapport au plan y/z (chaque coordonnée ' | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14> | ||
- | delim{|}{matrix{4}{4}{ | ||
- | (-1) 0 0 0 | ||
- | | ||
- | | ||
- | | ||
- | </m> | ||
- | </ | ||
- | |||
- | Voici les formules a appliquer si l'on désire transformer un point particulier: | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14>x prime = (x*-1) + (y* 0) + (z* 0) + (w* 0)</ | ||
- | |||
- | <m 14>y prime = (x* 0) + (y* 1) + (z* 0) + (w* 0)</ | ||
- | |||
- | <m 14>z prime = (x* 0) * (y* 0) * (z* 1) + (w* 0)</ | ||
- | |||
- | <m 14>w prime = (x* 0) + (y* 0) + (z* 0) + (w* 1)</ | ||
- | </ | ||
- | |||
- | ====== Rotation autour des axes de références ====== | ||
- | |||
- | C'est dans les rotations que les choses se compliquent, | ||
- | |||
- | ======= Autour de l'axe Y, avec un angle de ay degré ======= | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14> | ||
- | delim{|}{ | ||
- | matrix{4}{4}{ | ||
- | (cos(ay)) 0 (- sin(ay)) 0 | ||
- | 0 1 | ||
- | (sin(ay)) 0 (cos(ay)) 0 | ||
- | 0 0 0 1}}{|} | ||
- | </ | ||
- | </ | ||
- | |||
- | Voici les formules a appliquer si l'on désire transformer un point particulier: | ||
- | |||
- | <WRAP center round box 60%> | ||
- | |||
- | <m 14>x prime = (x* cos(ay)) + (y* 0) + (z*-sin(ay)) + (w* 0)</ | ||
- | |||
- | <m 14>y prime = (x* 0) + (y* 1) + (z* 0) + (w* 0)</ | ||
- | |||
- | <m 14>z prime = (x* sin(ay)) + (y* 0) + (z* cos(ay)) + (w* 0)</ | ||
- | |||
- | <m 14>w prime = (x* 0) + (y* 0) + (z* 0) + (w* 1)</ | ||
- | |||
- | </ | ||
- | |||
- | |||
- | ======= Autour de l'axe X, avec un angle de ax degré ======= | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14> | ||
- | delim{|}{ | ||
- | matrix{4}{4}{1 0 0 0 | ||
- | 0 (cos(ax)) | ||
- | 0 ( -sin(ax)) | ||
- | 0 0 0 1}}{|} | ||
- | </m> | ||
- | </ | ||
- | |||
- | Voici les formules a appliquer si l'on désire transformer un point particulier: | ||
- | <WRAP center round box 60%> | ||
- | |||
- | <m 14>x prime = (x* cos(ax)) + (y* 0) + (z*-sin(ay)) + (w* 0)</ | ||
- | |||
- | <m 14>y prime = (x* 0) + (y* 1) + (z* 0) + (w* 0)</ | ||
- | |||
- | <m 14>z prime = (x* sin(ax)) + (y* 0) + (z* cos(ay)) + (w* 0)</ | ||
- | |||
- | <m 14>w prime = (x* 0) + (y* 0) + (z* 0) + (w* 1)</ | ||
- | </ | ||
- | |||
- | |||
- | |||
- | ======= Autour de l'axe Z, avec un angle de az ° ======= | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14> | ||
- | delim{|}{matrix{4}{4}{ | ||
- | (cos(az)) (sin(az)) 0 0 | ||
- | ( -sin(az)) (cos(az)) 0 0 | ||
- | | ||
- | | ||
- | </ | ||
- | |||
- | |||
- | |||
- | Voici les formules a appliquer si l'on désire transformer un point particulier: | ||
- | |||
- | <WRAP center round box 60%> | ||
- | <m 14>x prime = (x* cos(az)) + (y* sin(az)) + (z* 0) + (w* 0)</ | ||
- | |||
- | <m 14>y prime = (x*-sin(az)) + (y* cos(az)) + (z* 0) + (w* 0)</ | ||
- | |||
- | <m 14>z prime = (x* 0) + (y* 0) + (z* 1) + (w* 0)</ | ||
- | |||
- | <m 14>w prime = (x* 0) + (y* 0) + (z* 0) + (w* 1)</ | ||
- | |||
- | </ | ||
- | |||
- | |||
- | ====== Conclusions temporaires ====== | ||
- | |||
- | Avec ces outils, il est possible de modifier un point (ou des points) dans l' | ||
- | |||
- | Ces transformations modifient la positions des points dans l' | ||
- | |||
- | Il est important de noter que ces transformations sont des outils aidant à créer d' | ||
- | |||
- | Dans la suite de cet article, je resterais (sauf exception) sur des matrices " | ||
===== Projection sur l' | ===== Projection sur l' | ||
Ligne 493: | Ligne 14: | ||
Si l'on désire représenter un point 3D en 2D, après transformation(s), | Si l'on désire représenter un point 3D en 2D, après transformation(s), | ||
- | < | + | <WRAP round box 60%> |
<m 14>x prime = x</m> | <m 14>x prime = x</m> | ||
Ligne 505: | Ligne 26: | ||
Sachant qu'un écran informatique peut afficher des points de 0,0 à sizex, sizey et que les valeurs de x' et y' peuvent quand à elles varier t entre -∞ et +∞, il convient de centrer le 0,0 sur l' | Sachant qu'un écran informatique peut afficher des points de 0,0 à sizex, sizey et que les valeurs de x' et y' peuvent quand à elles varier t entre -∞ et +∞, il convient de centrer le 0,0 sur l' | ||
- | x' = x' - (sizex/2) | ||
- | y' = y' - (sizey/ | ||
- | if ((x'>=0) and (x'<sizex) | + | <code c> |
- | draw_pixel(x', | + | x_screen |
+ | y_screen | ||
+ | if ((x_screen> | ||
+ | draw_pixel(x_screen, | ||
+ | </ | ||
==== Projection Simple dit aussi Projection du pauvre ==== | ==== Projection Simple dit aussi Projection du pauvre ==== | ||
Si l'on désire représenter un point 3D en 2D, après transformation(s), | Si l'on désire représenter un point 3D en 2D, après transformation(s), | ||
- | x' = x / z | ||
- | y' = y / z | ||
- | Cette projection transforme un point 3D en 2D en tenant compte de l' | + | <WRAP round box 60%> |
+ | |||
+ | <m 14>x prime = x / z</ | ||
+ | |||
+ | <m 14>y prime = y / z</ | ||
+ | </ | ||
+ | |||
+ | Cette projection transforme un point 3D en 2D en tenant compte de l' | ||
C'est la technique qui est utilisée en peinture (technique du "point de fuite" | C'est la technique qui est utilisée en peinture (technique du "point de fuite" | ||
Ligne 528: | Ligne 56: | ||
<code c> | <code c> | ||
- | if (z==0) | + | if (z_screen==0) |
{ | { | ||
- | | + | |
- | | + | |
} | } | ||
else | else | ||
{ | { | ||
- | | + | |
- | | + | |
} | } | ||
</ | </ | ||
Ligne 547: | Ligne 75: | ||
la projection sera dès lors calculée avec les formules suivantes | la projection sera dès lors calculée avec les formules suivantes | ||
- | x' | + | |
- | y' | + | <WRAP round box 60%> |
+ | <m 14>x prime = x*(ez/z) + ex</m> | ||
+ | |||
+ | <m 14>y prime = y*(ez/z) + ey</ | ||
+ | </ | ||
Si l'on considère que ex = -(sizex/2) et ey = -(sizey/2), et que ez=1, alors nous retombons sur la formule de la projection du pauvre... qui tiens nativement compte du centrage de l' | Si l'on considère que ex = -(sizex/2) et ey = -(sizey/2), et que ez=1, alors nous retombons sur la formule de la projection du pauvre... qui tiens nativement compte du centrage de l' | ||
Ligne 560: | Ligne 92: | ||
Si l'on désire appliquer les transformations en prenant en compte la position de l' | Si l'on désire appliquer les transformations en prenant en compte la position de l' | ||
- | Soit: | + | |
+ | <WRAP round info 100%> | ||
x,y,z : coordonnées cartésienne du point a transformer | x,y,z : coordonnées cartésienne du point a transformer | ||
+ | |||
ox,oy,oz : coordonnées cartésienne, | ox,oy,oz : coordonnées cartésienne, | ||
+ | |||
ax,ay,az : angles de vue , ces angles définissent la direction du regard à partir du point de l' | ax,ay,az : angles de vue , ces angles définissent la direction du regard à partir du point de l' | ||
+ | </ | ||
Alors la matrice de transformation devient | Alors la matrice de transformation devient | ||
- | |x' | ||
- | |y'| = | 0 cos(ax) sin(ax)| * | | ||
- | |z' | ||
- | Note: | + | <WRAP round box 95%> |
+ | <m 14> | ||
+ | delim{|}{ | ||
+ | delim{|}{ | ||
+ | delim{|}{ | ||
+ | delim{|}{ | ||
+ | delim{|}{ | ||
+ | delim{|}{ | ||
+ | ) | ||
+ | </ | ||
+ | </ | ||
- | Dans l' | ||
- | Si l'on n'a pas d' | + | |
- | |x' | + | <WRAP round tip 100%> |
- | |y'| = |y| - |oy| | + | Dans l' |
- | |z' | + | |
+ | Si l'on n'a pas d' | ||
+ | |||
+ | <WRAP round box 60%> | ||
+ | <m 14> | ||
+ | delim{|}{ matrix{4}{1} | ||
+ | delim{|}{ matrix{4}{1} | ||
+ | delim{|}{ matrix{4}{1} | ||
+ | </ | ||
+ | </ | ||
Mais il ne faut pas oublié que l' | Mais il ne faut pas oublié que l' | ||
- | |x' | + | |
- | |y'| = |y| | + | <WRAP round box 60%> |
- | |z' | + | <m 14> |
+ | delim{|}{ matrix{4}{1} | ||
+ | delim{|}{ matrix{4}{1} | ||
+ | </ | ||
+ | </ | ||
Et l'on retombe bien sur une matrice toute simple. | Et l'on retombe bien sur une matrice toute simple. | ||
+ | </ | ||
+ | |||
===== Conclusions ===== | ===== Conclusions ===== | ||
Ligne 592: | Ligne 149: | ||
vec quelques définitions voici les formules que nous allons implémenter. | vec quelques définitions voici les formules que nous allons implémenter. | ||
- | soit: | + | <WRAP round info 95%> |
ox, | ox, | ||
+ | |||
+ | w : 1 (valeur de 1 pour simplifier) | ||
+ | |||
x[],y[],z[] : coordonnées cartésienne des points a transformer | x[],y[],z[] : coordonnées cartésienne des points a transformer | ||
- | ex, | + | |
- | avec ex=-(sizex/ | + | ex, |
ax, | ax, | ||
- | cx = cos(ax), sx = sin(ax), cy = cos(ay), ... | + | |
+ | cx = cos(ax), sx = sin(ax), cy = cos(ay), ... | ||
nx, | nx, | ||
+ | </ | ||
pseudo code: | pseudo code: | ||
+ | |||
+ | < | ||
foreach | foreach | ||
{ | { | ||
Ligne 615: | Ligne 181: | ||
y' = ny*(ez/nz) + ey | y' = ny*(ez/nz) + ey | ||
} | } | ||
+ | </ | ||
+ | |||
+ | <nspages back2root/ | ||
====== Références ====== | ====== Références ====== | ||
+ | <WRAP round box> | ||
+ | <WRAP group> | ||
+ | <WRAP column> | ||
+ | {{ books: | ||
+ | </ | ||
+ | <WRAP column> | ||
**3D et vrai Relief** | **3D et vrai Relief** | ||
- | J.J.Meyer | + | |
+ | J.J.Meyer | ||
ISBN: 2-7091-0990-5 | ISBN: 2-7091-0990-5 | ||
+ | |||
https:// | https:// | ||
+ | https:// | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <WRAP group> | ||
+ | <WRAP column> | ||
+ | {{ books: | ||
+ | </ | ||
+ | <WRAP column> | ||
**PC Interdit 2eme édition Windows 95 & Jeux 3D** | **PC Interdit 2eme édition Windows 95 & Jeux 3D** | ||
+ | |||
Boris Bertelsons, Mathias Rasch et Jan Erik Hoffmann | Boris Bertelsons, Mathias Rasch et Jan Erik Hoffmann | ||
+ | |||
ISBN: 2-7429-0500-6 | ISBN: 2-7429-0500-6 | ||
+ | |||
https:// | https:// | ||
+ | https:// | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <WRAP group> | ||
+ | <WRAP column> | ||
+ | {{ books: | ||
+ | </ | ||
+ | <WRAP column> | ||
**Mathematics of 3D Graphics** | **Mathematics of 3D Graphics** | ||
+ | |||
Juan David Gonzalez Cobas | Juan David Gonzalez Cobas | ||
+ | |||
Universidad de Oviedo | Universidad de Oviedo | ||
+ | |||
Blender Conference 2004 | Blender Conference 2004 | ||
+ | |||
https:// | https:// | ||
- | |||
- | http:// | ||
https:// | https:// | ||
- | https:// | + | |
+ | https:// | ||
https:// | https:// | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ |