Outils pour utilisateurs

Outils du site


back2root:programmation:3d-theories-et-mathematiques-part-1

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
back2root:programmation:3d-theories-et-mathematiques-part-1 [2021/08/04 19:56] – [Conclusions temporaires] fraterback2root:programmation:3d-theories-et-mathematiques-part-1 [2024/06/28 15:33] (Version actuelle) frater
Ligne 10: Ligne 10:
  
 Malheureusement, pour comprendre et "masteriser" la 3d sur ordinateur, un gros bloc de théorie mathématique est a lire, je vais essayer de le faire aussi court mais complet que possible... Malheureusement, pour comprendre et "masteriser" la 3d sur ordinateur, un gros bloc de théorie mathématique est a lire, je vais essayer de le faire aussi court mais complet que possible...
- 
-===== Système de références ===== 
- 
-Tout est une question de références, il existes trois grands systèmes pour décrire un espace en trois dimensions, il existe trois grands « système » de représentation mathématique. 
- 
-==== 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é === === Radian vs Degré ===
Ligne 31: Ligne 21:
 pourtant, il est impératif d'utiliser des radians lorsqu'on fait des calculs trigonométriques, nous allons directement voir la relation entre radian et degré d'angle (180 degré d'angle, correspondent à Π radian) pourtant, il est impératif d'utiliser des radians lorsqu'on fait des calculs trigonométriques, nous allons directement voir la relation entre radian et degré d'angle (180 degré d'angle, correspondent à Π radian)
  
-<WRAP center round box 60%><m 14>eta radian = 180 degre</m></WRAP>+<WRAP round box><m 14>eta radian = 180 degre</m></WRAP>
  
 Donc 1 radian vaut +/- 57.2958 degré d'angle (suivant la valeur de <m 14>eta</m> pour effectuer la conversion) pour connaître la valeur (exacte) d'un radian, il suffit de: Donc 1 radian vaut +/- 57.2958 degré d'angle (suivant la valeur de <m 14>eta</m> pour effectuer la conversion) pour connaître la valeur (exacte) d'un radian, il suffit de:
  
-<WRAP center round box 60%><m 14>1 radian = 180/eta degre</m></WRAP>+<WRAP round box><m 14>1 radian = 180/eta degre</m></WRAP>
  
 Les formules de conversion sont donc les suivantes: Les formules de conversion sont donc les suivantes:
Ligne 41: Ligne 31:
 == degré -> radian == == degré -> radian ==
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14>x radian = angle * (eta/180)</m> <m 14>x radian = angle * (eta/180)</m>
 </WRAP> </WRAP>
Ligne 48: Ligne 38:
 == radian -> degré == == radian -> degré ==
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14>x degre = rad * (180/eta)</m> <m 14>x degre = rad * (180/eta)</m>
 </WRAP> </WRAP>
  
  
-=== le système sphérique ===+===== Système de références ===== 
 + 
 +Tout est une question de références, il existes trois grands systèmes pour décrire un espace en trois dimensions, il existe trois grands « système » de représentation mathématique. 
 + 
 +==== Le système cartésien ==== 
 + 
 +Sans doute le plus simple a comprendre car le plus proche de notre mode « mathématique ». 
 + 
 +{{back2root:programmation:3d-space-cartesien.png?400}} 
 + 
 +Une coordonnée est exprimée « simplement » avec avec trois coordonnées : x, y, z 
 + 
 +==== 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, ou distance dans le cas d’objets céleste) :  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, ou distance dans le cas d’objets céleste) : 
 +
 +{{back2root:programmation:3d-space-spherique.png?400}}
  
 Une coordonnée est exprimée avec un rayon r et deux angles : r, <m 13>theta</m>,<m 13>varphi</m>. Une coordonnée est exprimée avec un rayon r et deux angles : r, <m 13>theta</m>,<m 13>varphi</m>.
  
-=== le système cylindrique ===+==== 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. 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.
 +
 +{{back2root:programmation:3d-space-cylindrique.png?400}}
  
 Une coordonnée est exprimée via deux angles : <m 13>rho</m>, <m 13>varphi</m> et une distance : z Une coordonnée est exprimée via deux angles : <m 13>rho</m>, <m 13>varphi</m> et une distance : z
  
-=== Conversions entre systèmes de références ===+==== Conversions entre systèmes de références ====
  
-== Sphérique → Cartésien ==+=== Sphérique → Cartésien ===
  
-<WRAP center round box 60%>+<WRAP round box>
  
 <m 13>x = r * sin (theta) * cos (phi)</m> <m 13>x = r * sin (theta) * cos (phi)</m>
Ligne 78: Ligne 84:
 </WRAP> </WRAP>
  
 +=== Cylindrique → Cartésien ===
  
-== Cylindrique → Cartésien == +<WRAP round box>
- +
-<WRAP center round box 60%>+
 <m 13>x = rho cos(phi)</m> <m 13>x = rho cos(phi)</m>
  
Ligne 89: Ligne 94:
 </WRAP> </WRAP>
  
- +===== Calculs et matrices: Méthode LICOL =====
-===== 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. En calcul 3D, le calcul matriciel la méthode la plus simple pour résoudre les transformations que l'on veut appliquer.
Ligne 98: Ligne 102:
 Pour additionner 2 matrices, il s’agit de faire la somme de leurs membres: Pour additionner 2 matrices, il s’agit de faire la somme de leurs membres:
      
-<WRAP center round box 60%>+<WRAP round box>
 <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+d1) (a2+c2) (b2+d2)}}{|}</m> <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+d1) (a2+c2) (b2+d2)}}{|}</m>
 </WRAP> </WRAP>
  
-Pour la multiplication, on utilisera la technique "LICOL" (Ligne Colonne), on multiplie chaque ligne par la colonne.+Pour la multiplication, on utilisera la technique "**LICOL**" (Ligne Colonne), on multiplie chaque ligne par la colonne.
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14> <m 14>
 delim{|}{matrix{2}{2}{a1 b1 a2 b2}}{|} *  delim{|}{matrix{2}{2}{a1 b1 a2 b2}}{|} * 
Ligne 111: Ligne 115:
 </WRAP> </WRAP>
  
-==== Note sur la multiplication par 1 ====+<WRAP round info> 
 +**Note sur la multiplication par 1**
  
-Dans un calcul simple, quand on multiplie n'importe quelle valeur par 1 on obtient toujours la valeur d'origine :+Dans un calcul simple, il est évident que, lorsque l'on multiplie n'importe quelle valeur par 1 on obtient toujours la valeur d'origine :
  
-<WRAP center round box 60%+<WRAP round box> 
-<m 14>x prime = x * 1 </m>+<m 14>x prime = x * 1</m>
 </WRAP> </WRAP>
  
Ligne 124: Ligne 129:
 En calcul matriciel , la valeur '1' se présente comme ceci: En calcul matriciel , la valeur '1' se présente comme ceci:
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14>delim{|}{matrix{2}{2}{1 0 0 1}}{|}</m> <m 14>delim{|}{matrix{2}{2}{1 0 0 1}}{|}</m>
 </WRAP> </WRAP>
- +</WRAP>
 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:  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%>+<WRAP round box>
 <m 14>(x,y,z)</m> <m 14>(x,y,z)</m>
 </WRAP> </WRAP>
Ligne 137: Ligne 141:
 et, ainsi la multiplication d'une matrice par '1' se présente comme ceci :  et, ainsi la multiplication d'une matrice par '1' se présente comme ceci : 
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14> <m 14>
 delim{|}{matrix{3}{1}{x y z}}{|} =  delim{|}{matrix{3}{1}{x y z}}{|} = 
Ligne 147: Ligne 151:
 Comme tous les langages de programmations n'incluent pas nativement le support de calcul matriciel, il convient de traduire ce produit matriciel en fonction simple (ou en une dimension) et de le faire pour chaque membre de la coordonnée que l'on veut calculer, vu la méthode LICOL que nous avons vu plus haut, cela devient donc: Comme tous les langages de programmations n'incluent pas nativement le support de calcul matriciel, il convient de traduire ce produit matriciel en fonction simple (ou en une dimension) et de le faire pour chaque membre de la coordonnée que l'on veut calculer, vu la méthode LICOL que nous avons vu plus haut, cela devient donc:
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14>x prime = (x*1) + (y*0) + (z*0)</m> <m 14>x prime = (x*1) + (y*0) + (z*0)</m>
  
Ligne 158: Ligne 162:
 Ce qui dans ce cas précis peut s'optimiser par l'application des formules suivantes: Ce qui dans ce cas précis peut s'optimiser par l'application des formules suivantes:
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14>x prime = x * 1</m> <m 14>x prime = x * 1</m>
  
Ligne 170: Ligne 174:
 Toutefois, pour pouvoir correctement appliquer certaines transformations (notamment la translation), dans certaines littératures, on rends homogènes les matrices, en ajoutant une 4ème valeur w, qui doit TOUJOURS être mise à 1, on parle alors de matrices homogènes : Toutefois, pour pouvoir correctement appliquer certaines transformations (notamment la translation), dans certaines littératures, on rends homogènes les matrices, en ajoutant une 4ème valeur w, qui doit TOUJOURS être mise à 1, on parle alors de matrices homogènes :
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14> <m 14>
 delim{|}{matrix{4}{4}{  delim{|}{matrix{4}{4}{ 
Ligne 179: Ligne 183:
 </m> </m>
 </WRAP> </WRAP>
 +
 +Il est en effet beaucoup plus simple d'appliquer la méthode **LICOL** sur des matrices qui ont le même nombre (pair) de lignes et de colonnes (par exemple une matrice 4x1 se multipliera très facilement avec une matrice 4x4)
  
 Ce qui peut se traduire simplement :  Ce qui peut se traduire simplement : 
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14>x prime = (x*1) + (y*0) + (z*0) + (w*0)</m> <m 14>x prime = (x*1) + (y*0) + (z*0) + (w*0)</m>
  
Ligne 194: Ligne 200:
 Ou encore en mode "optimisé", afin de démontré que les matrices, c'est simple :  Ou encore en mode "optimisé", afin de démontré que les matrices, c'est simple : 
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14>x prime = x * 1</m> <m 14>x prime = x * 1</m>
  
Ligne 206: Ligne 212:
 En résumé, un produit matriciel d'une matrice point "P" avec une matrice de transformation "T" s'écrit comme ceci: En résumé, un produit matriciel d'une matrice point "P" avec une matrice de transformation "T" s'écrit comme ceci:
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14> <m 14>
 delim{|}{matrix{4}{1}{ nx ny nz nw}}{|} =  delim{|}{matrix{4}{1}{ nx ny nz nw}}{|} = 
Ligne 221: Ligne 227:
 Et se résous avec les équations suivantes: Et se résous avec les équations suivantes:
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14>x prime = (x*xa) + (y*xb) + (z*zb) + (w*xd)</m> <m 14>x prime = (x*xa) + (y*xb) + (z*zb) + (w*xd)</m>
  
Ligne 247: Ligne 253:
 Sans doute la matrice la plus simple, la matrice de transformation d'échelle: Sans doute la matrice la plus simple, la matrice de transformation d'échelle:
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14> <m 14>
 delim{|}{matrix{4}{4}{  delim{|}{matrix{4}{4}{ 
Ligne 261: Ligne 267:
 Voici les formules a appliquer si l'on désire transformer un point particulier: Voici les formules a appliquer si l'on désire transformer un point particulier:
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14>x prime = (x*ex) + (y* 0) + (z* 0) + (w* 0)</m> <m 14>x prime = (x*ex) + (y* 0) + (z* 0) + (w* 0)</m>
  
Ligne 274: Ligne 280:
 Si il existe une transformation souvent sous estimée, c'est bien celle-ci, le déplacement d'un point dans l'espace: Si il existe une transformation souvent sous estimée, c'est bien celle-ci, le déplacement d'un point dans l'espace:
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14> <m 14>
 delim{|}{matrix{4}{4}{  delim{|}{matrix{4}{4}{ 
Ligne 286: Ligne 292:
 Voici les formules a appliquer si l'on désire transformer un point particulier: Voici les formules a appliquer si l'on désire transformer un point particulier:
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14>x prime = (x* 1) + (y* 0) + (z* 0) + (w*tx)</m> <m 14>x prime = (x* 1) + (y* 0) + (z* 0) + (w*tx)</m>
  
Ligne 298: Ligne 304:
 Rappelez vous que w = 1, et donc nos formules peuvent se traduire par: Rappelez vous que w = 1, et donc nos formules peuvent se traduire par:
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14>x prime = x+tx</m> <m 14>x prime = x+tx</m>
  
Ligne 316: Ligne 322:
 Effet miroir par rapport au plan x/y (chaque coordonnée 'z' sera inversée): Effet miroir par rapport au plan x/y (chaque coordonnée 'z' sera inversée):
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14> <m 14>
 delim{|}{matrix{4}{4}{ delim{|}{matrix{4}{4}{
Ligne 328: Ligne 334:
 Voici les formules a appliquer si l'on désire transformer un point particulier: Voici les formules a appliquer si l'on désire transformer un point particulier:
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14>x prime = (x* 1) + (y* 0) + (z* 0) + (w* 0)</m> <m 14>x prime = (x* 1) + (y* 0) + (z* 0) + (w* 0)</m>
  
Ligne 340: Ligne 346:
  
 Effet miroir par rapport au plan x/z (chaque coordonnée 'y' sera inversée): Effet miroir par rapport au plan x/z (chaque coordonnée 'y' sera inversée):
-<WRAP center round box 60%>+<WRAP round box>
 <m 14> <m 14>
 delim{|}{matrix{4}{4}{ delim{|}{matrix{4}{4}{
Ligne 352: Ligne 358:
 Voici les formules a appliquer si l'on désire transformer un point particulier: Voici les formules a appliquer si l'on désire transformer un point particulier:
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14>x prime = (x* 1) + (y* 0) + (z* 0) + (w* 0)</m> <m 14>x prime = (x* 1) + (y* 0) + (z* 0) + (w* 0)</m>
  
Ligne 364: Ligne 370:
 Effet miroir par rapport au plan y/z (chaque coordonnée 'x' sera inversée): Effet miroir par rapport au plan y/z (chaque coordonnée 'x' sera inversée):
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14> <m 14>
 delim{|}{matrix{4}{4}{ delim{|}{matrix{4}{4}{
Ligne 376: Ligne 382:
 Voici les formules a appliquer si l'on désire transformer un point particulier: Voici les formules a appliquer si l'on désire transformer un point particulier:
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14>x prime = (x*-1) + (y* 0) + (z* 0) + (w* 0)</m> <m 14>x prime = (x*-1) + (y* 0) + (z* 0) + (w* 0)</m>
  
Ligne 392: Ligne 398:
 ======= Autour de l'axe Y, avec un angle de ay degré ======= ======= Autour de l'axe Y, avec un angle de ay degré =======
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14> <m 14>
 delim{|}{ delim{|}{
Ligne 405: Ligne 411:
 Voici les formules a appliquer si l'on désire transformer un point particulier: Voici les formules a appliquer si l'on désire transformer un point particulier:
  
-<WRAP center round box 60%>+<WRAP round box>
  
-<m 14>x prime = (x* cos(ay)) + (y*       0) + (z*-sin(ay)) + (w* 0)</m>+<m 14>x prime = (x* cos(ay)) + (y*       0) + (z* -sin(ay)) + (w* 0)</m>
  
 <m 14>y prime = (x*       0) + (y*       1) + (z*       0) + (w* 0)</m> <m 14>y prime = (x*       0) + (y*       1) + (z*       0) + (w* 0)</m>
Ligne 420: Ligne 426:
 ======= Autour de l'axe X, avec un angle de ax degré ======= ======= Autour de l'axe X, avec un angle de ax degré =======
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14> <m 14>
 delim{|}{ delim{|}{
Ligne 431: Ligne 437:
  
 Voici les formules a appliquer si l'on désire transformer un point particulier: Voici les formules a appliquer si l'on désire transformer un point particulier:
-<WRAP center round box 60%>+<WRAP round box>
  
-<m 14>x prime = (x* cos(ax)) + (y* 0) + (z*-sin(ay)) + (w* 0)</m>+<m 14>x prime = (x*      1) + (y * 0) + (z * 0) + (w* 0)</m>
  
-<m 14>y prime = (x*       0) + (y* 1) + (z*       0) + (w* 0)</m>+<m 14>y prime = (x*       0) + (y* cos(ax)) + (z* sin(ax)) + (w * 0)</m>
  
-<m 14>z prime = (x* sin(ax)) + (y* 0) + (z* cos(ay)) + (w* 0)</m>+<m 14>z prime = (x* 0) + ( y * -sin(ax)) + (z* cos(ax)) + (w* 0)</m>
  
 <m 14>w prime = (x*       0) + (y* 0) + (z*       0) + (w* 1)</m> <m 14>w prime = (x*       0) + (y* 0) + (z*       0) + (w* 1)</m>
Ligne 446: Ligne 452:
 ======= Autour de l'axe Z, avec un angle de az ° ======= ======= Autour de l'axe Z, avec un angle de az ° =======
  
-<WRAP center round box 60%>+<WRAP round box>
 <m 14> <m 14>
 delim{|}{matrix{4}{4}{ delim{|}{matrix{4}{4}{
Ligne 459: Ligne 465:
 Voici les formules a appliquer si l'on désire transformer un point particulier: Voici les formules a appliquer si l'on désire transformer un point particulier:
  
-<WRAP center round box 60%+<WRAP round box> 
-<m 14>x prime = (x* cos(az)) + (y* sin(az)) + (z* 0) + (w* 0)</m>+<m 14>x prime = (x*   cos(az)) + (y* sin(az)) + (z* 0) + (w* 0)</m>
  
-<m 14>y prime = (x*-sin(az)) + (y* cos(az)) + (z* 0) + (w* 0)</m>+<m 14>y prime = (x*  -sin(az)) + (y* cos(az)) + (z* 0) + (w* 0)</m>
  
 <m 14>z prime = (x*       0) + (y*       0) + (z* 1) + (w* 0)</m> <m 14>z prime = (x*       0) + (y*       0) + (z* 1) + (w* 0)</m>
back2root/programmation/3d-theories-et-mathematiques-part-1.1628099773.txt.gz · Dernière modification : 2021/08/04 19:56 de frater