Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Bases mathématiques du graphisme à 3 dimensions | |
|
+5Jean Claude Jicehel bignono mindstorm papydall 9 participants | |
Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Bases mathématiques du graphisme à 3 dimensions Lun 1 Avr 2013 - 1:56 | |
| Les bases mathématiques du graphisme à 3 dimensions
Tout le monde sait que l’ordinateur est un appareil qui dessine en 2 dimensions. Mais on peut projeter des images de l’espace tridimensionnel sur l’espace bidimensionnel de l’écran. Pour réaliser cette projection, les mathématiques nous viennent en aide. Comme je ne prétends pas faire des cours des maths (d’ailleurs je n’en suis pas capable, hélas !), je donnerais ci-après les formules de transformation réduites à leur plus simple expression.
Systèmes de coordonnées Pour repérer un point de l’espace à 3 dimensions, divers systèmes de coordonnées peuvent convenir. Le système direct, dit également système de la main droite. Si l’index pointe dans la direction de l’axe X et le majeur dans la direction de l’axe Y, alors le pouce pointe dans la direction de l’axe Z. Le système indirect (ou de la main gauche) aura la direction de l’axe Z opposée. Si l’on regarde le plan XY d’un système direct alors l’axe Z pointe vers l’œil de l’observateur. Avec le système indirect, l’axe Z pointe dans la direction opposée.
Les coordonnées Un point P de l’espace peut être repéré par ses coordonnées cartésiennes x,y,z ou bien par ses coordonnées sphériques Rho,Theta,Phi. Les formules de passage d’un système à l’autre sont :
x = Rho*cos(Theta)*cos(Phi) y = Rho*sin(Theta)*cos(Phi) z = Rho*sin(Phi) Rho² = x² + y² + z²
Les matrices de transformations de l’espace
Nous utiliserons les coordonnées homogènes. Un point de l’espace cartésien à des coordonnées du type (x,y,z) et des coordonnées homogènes (x,y,z,1) qui peuvent s’écrire sous la forme d’une matrice (1X4). Il est alors nécessaire que les transformations de l’espace soient représentées par des matrices (4X4). Il ne faut pas oublier qu’un produit matriciel n’est possible que si le nombre de colonnes de la 1ere matrice est égal au nombre de lignes de la seconde. La 4ème colonne ajoutée à la matrice est nécessaire afin d’obtenir une matrice carrée (condition indispensable pour qu’elle ait une inverse).
REMARQUE : Les matrices 4X4 ci-après contiennent 4 lignes de 4 colonnes : les colonnes sont séparées par des espaces. L’envoi sur le Forum perturbe ces espaces. Essayez de bien délimiter les différents termes. Les changements d’échelles La matrice est : A 0 0 0 0 B 0 0 0 0 C 0 0 0 0 1 Le produit de (x y z 1) et de la matrice indiquée donne le résultat suivant : (x’, y’, z’, 1) = (A*x , B*y, C*z, 1) Ce sont les termes de la diagonale principale de la matrice (4X4) qui produisent les changements d’échelles selon un axe bien déterminé ou de façon uniforme si A=B=C.
Les rotations La matrice (3X3) suivante donne une rotation autour de l’origine d’un angle Theta dans le sens trigonométrique :
cos(Theta) sin(Theta) 0 -sin(Theta) cos(Theta) 0 0 0 1 Comme nous avons postulé que l’axe Z pointait vers l’œil de l’observateur, cela signifie que la rotation se fera autour de l’axe Z de sorte qu’aucune coordonnée Z ne change ! De ce fait, la matrice de rotation autour de l’axe Z doit avoir des zéros dans les troisièmes ligne et colonne, excepté le terme situé sur la diagonale principale qui sera 1.
Sans entrer dans les détails des calculs et les démonstrations voici les matrices de rotations autour des 3 axes. La rotation est faite dans le sens positif c.à.d le sens trigonométrique lorsqu’on regarde l’origine d’un point situé sur l’axe positif concerné. Matrice de rotation dans l’espace autour de l’axe X : 1 0 0 0 0 cos(Theta) sin(Theta) 0 0 –sin(Theta) cos(Theta) 0 0 0 0 1
Matrice de rotation dans l’espace autour de l’axe Y : cos(Theta) 0 – sin(Theta) 0 0 1 0 0 sin(Theta) 0 cos(Theta) 0 0 0 0 1
Matrice de rotation dans l’espace autour de l’axe Z :
cos(Theta) sin(Theta) 0 0 -sin(Theta) cos(Theta) 0 0 0 0 1 0 0 0 0 1
REMARQUE : Le produit matriciel n’est, en général, pas commutatif. Il s’en suit que le résultat de 2 rotations successives dépendra de l’ordre dans lequel on a effectué le produit.
Les translations La matrice qui contrôle les translations est : 1 0 0 0 0 1 0 0 0 0 1 0 M N P 1
Les coordonnées d’un point (x,y,z) seront, après la translation : x’ = x + M y’ = y + N z’ = z + P
Les symétries
Pour trouver le symétrique d’un objet par rapport au plan XY, par exemple, il suffit de changer le signe de la côte Z de tous les points de cet objet. Le raisonnement est identique pour les symétries par rapport aux plans XZ et YZ. symétrie par rapport au plan XY 1 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 1 Symétrie par rapport au plan XZ 1 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 1 Symétrie par rapport au plan YZ -1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
Rotation autour d’un axe arbitraire
Le résultat de la composition d’une série de transformation peut se représenter par une matrice unique. Exemple : pour chercher la matrice de rotation d’un angle Theta autour du vecteur pq parallèle à l’axe X et tel que p(a,b,c) et q(d,e,f) : 1- On effectue une translation T qui amène le point p à l’origine du système d’axe. 2- On effectue la rotation R demandée d’angle theta. 3- On effectue une translation T’ opposée à la 1ère qui ramène le point p à sa position initiale. On obtient le produit matriciel suivant M = T*R*T’ qui (tout calcul fait) donne le résultat suivant : 1 0 0 0 0 cos(Theta) sin(Theta) 0 0 –sin(Theta) cos(Theta) 0 0 –b*cos(Theta)+c*sin(Theta)+b -b*sin(Theta)-c*cos(Theta)+c 1
Inverse d’une matrice Disons simplement que dans des cas précis les matrices inverses sont faciles à trouver. • L’inverse d’une matrice translation s’obtient en remplaçant les termes M,N et P par leur opposé -M, -N et -P. • L’inverse d’une matrice changement d’échelles s’obtient en remplaçant les termes A, B, C par leur inverse 1/A, 1/B, 1/C. • L’inverse d’une matrice rotation s’obtient en remplaçant l’angle Theta par son opposé -Theta.
REMARQUE : La sous-matrice (3X3) supérieure extraite d’une matrice de rotation est dite orthogonale car ses colonnes sont des vecteurs unitaires orthogonaux. N’importe qu’elle matrice orthogonale M admet pour inverse sa propre transposée.
Transformation d’un système d’axes On a vu comment transformer des points rapportés à un système d’axes. On peut aussi transformer un système d’axes en un autre système en faisant subir une transformation aux axes eux-mêmes. On peut translater l’origine du système d’axes vers un autre lieu ou bien lui faire subir une rotation par rapport à l’un de ses axes. Par exemple : la rotation d’un angle Theta autour de l’axe Z est strictement équivalente à la rotation du système d’axes de l’angle -Theta La matrice nécessaire à la rotation d’un système d’axes est la matrice inverse de celle nécessaire à la rotation d’un point dans ce système
Les différents types de projection sur un plan Une projection transforme les points d’un système à N dimensions en des points d’un système de dimension inférieure à N. La catégorie de projection est connue sous le nom de projections géométriques planes car elle se fait sur un plan. Les projections géométriques planes se divisent en 2 grandes classes. 1) Les projections perspectives Dans ce type de projection, le centre de projection est à distance finie du plan de projection. Ce type de projection crée un effet visuel semblable à celui perçu par le système de vision humain. La taille des objets projetés est inversement proportionnelle à la distance séparant l’objet du centre de projection. 2) Les projections parallèles Dans ce type de projection, le centre de projection est à l’infini. Ce type de projection est moins réaliste que la projection perspective. 3)Les projections obliques Dans ce type de projection, le plan de projection est perpendiculaire à un des axes mais plus à la direction de la projection. Les 2 projections obliques les plus connues sont la projection cavalière et la projection cabinet. Dans la 1ère , la direction de projection fait un angle de 45° avec le plan de projection et il n’y a pas de raccourcissement. Les lignes fuyantes sont dessinées généralement avec un angle de 30° ou de 45° avec l’horizontale. Dans la seconde, on raccourcit les lignes fuyantes dans le rapport 1 /2 . De ce fait la projection cabinet est plus réaliste que la projection cavalière.
La projection en perspective Afin de pouvoir projeter une image d’un objet sur le plan de l’écran, il est nécessaire d’associer à toute coordonnée d’un point de l’espace une coordonnée écran. On postule que : • L’écran est un plan perpendiculaire à la droite OO’ qui joint l’œil à l’origine du système d’axes auquel l’objet est rapporté. • L’écran est situé à une distance D de l’œil de l’observateur. • Le système de coordonnées de l’observateur a son origine placée en son œil et l’axe ZO pointe dans la direction de l’origine O, c’est donc un système indirect ou gauche.
De plus on adopte le système de coordonnées sphériques pour localiser l’œil de l’observateur. Cela nous permet un contrôle aisé de la vision de l’objet que l’on pourra voir sous n’importe quel angle en faisant varier les deux angles Theta et Phi. La distance de l’œil à l’origine du système de l’objet sera désignée par Rho. Si Rho augmente cela veut dire que l’on s’éloigne de l’objet qui apparaîtra plus petit. Inversement, si Rho diminue cela signifie que l’on se rapproche de l’objet et celui-ci apparaîtra plus grand.
Une vue en perspective de l’objet sera générée simplement en projetant chaque point de l’objet sur le plan de l’écran. Voici les relations liant les coordonnées écran (xe,ye) aux coordonnées (xo,yo,zo) d’un point quelconque P de l’objet considéré dans le système de l’observateur. xe = D*xo/zo et ye = D*yo/zo
REMARQUE: Le plan de projection (l’écran) ne doit pas nécessairement se trouver entre l’objet et l’œil. Il peut se situer derrière l’objet. Dans ce cas, si l’écran se rapproche de l’œil, alors l’image projetée rapetisse et, inversement, si l’écran s’éloigne de l’œil , alors l’image projetée s’agrandit.
A suivre ...
EDIT J’ai commencé à coder les procédures nécessaires pour le graphisme en 3D. Quelques problèmes de santé et des affaires urgentes m’interpellent, ce qui fait que je vais m’absenter pour quelque temps. J’espère être de retour dans quelques jours !
| |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Bases mathématiques du graphisme à 3 dimensions Lun 1 Avr 2013 - 8:05 | |
| bonjour papydall nous te souhaitons un prompt retablissement bon courage | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Bases mathématiques du graphisme à 3 dimensions Lun 1 Avr 2013 - 9:28 | |
| Bonjour Papydall Ton exposé est de plus en plus passionant! Je te souhaite une meilleure santé et que tes problèmes s'arrangent au plus vite. A bientôt, surement... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Bases mathématiques du graphisme à 3 dimensions Lun 1 Avr 2013 - 11:58 | |
| Trop bien Papydall, quand tu iras mieux et que tu auras du temps, si tu peux continuer à faire des articles avec leurs illustrations de cette qualité, je pense que ça fera encore venir des visiteurs (Sans parler de Jean Debord qui doit se délecter dans ces fonctions mathématiques). S'il y a des volontaires en traduction, ça serait intéressant de le traduire sur le forum anglais, je pense. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Bases mathématiques du graphisme à 3 dimensions Lun 1 Avr 2013 - 20:27 | |
| C'est un sacré boulot que tu fournis Papydall, je vois un de nos spécialiste (Big nono pour ne pas le citer) qui va en tirer des jeux futurs. Pour ma part, je ne comprends pas tout, mais qui sait, un jour....
Soignes-toi bien, règles tes affaires et reviens-nous vite.
A+ | |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Bases mathématiques du graphisme à 3 dimensions Lun 1 Avr 2013 - 21:26 | |
| Incroyable !!! Je suis très heureux de participer à ce forum : ce dont vous rêvez la nuit, vous l'y trouvez le jour !!! Cela me rappelle le bon vieux temps de mes entrainements de judo,il y avait les ceintures blanches (comme moi) et les ceintures noires, toujours prêts à nous emmener plus loin (et souvent par la voie des airs) . Notre devise était : entraide et prospérité mutuelle. Respect, Papydall. Je te souhaite un prompt rétablissement. | |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Bases mathématiques du graphisme à 3 dimensions Mar 2 Avr 2013 - 7:25 | |
| Je veux bien me mettre à traduire de ci de là (en fait j'ai un peu commencé) mais j'y vais tout doucement. Si vous n'êtes pas absolument pressés... ça vient... Bonne journée ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Bases mathématiques du graphisme à 3 dimensions Mar 2 Avr 2013 - 7:45 | |
| Génial Froggy One, merci. Personne n'est pressé. Il n'y a que quelque chose en plus qui aboutira quand tu en auras le temps.
| |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Bases mathématiques du graphisme à 3 dimensions Mar 2 Avr 2013 - 11:59 | |
| Voici un petit début de traduction, l'auteur se reconnaîtra. Excellent exercice pour assimiler !!! Mathematical bases of two dimension graphics 1-The window (WINDOW) (Nothing to do with Windows system) The user’s two dimension space theoretically spreads to infinite. But, practically, nobody will work with so large a space! One generally works with a rectangular part of this space. This zone can be considered as a window that specifies the data zone to be seen by the computer. The four variables W1, W2, W3, W4 defining the window, are given using the user’s units. They may be kilometers, hours, volts, Euros etc. W1 = minimum abscissa; W2 = maximum abscissa ; W3 = minimum Y-axis; W4 = maximum Y-axis 2- Closure (VIEWPORT) This is the rectangular zone of the screen, on which the window’s content will be projected. The four variables V1, V2, V3, V4 will, this time, be described using the graphic system’s units.. 3-From user’s to screen’s references Here are the formulas (no demo) XE = (XR * (V2 – V1) – W1 * V2 + V1 * W2) / (W2 –W3) YE = (YR * (V4 - V3) – W3 * V4 + V3 * W4) / (W4 – W3) Avec XE et YE : screen coordinates XR et YR : real coordinates of the point inside the user’s universe V1, V2,V3,V4 : closure’s coordinates (VIEWPORT) W1, W2, W3, W4 : window’s coordinates (WINDOW) 4- Transformations in a plane Main plane transformations are : translations, scale changes, symmetries, rotations and shearing. Matrix calculus permits to solve these problems easily. The theory is a bit difficult and will not be exposed here. I’ll just give you formulas to use in your program, avoiding too many headaches (not anybody has spared lots of aspirin !) But a slice of theory could prove necessary. Given (x,y) as coordinates of a point in the cartesian plan (thank you Monsieur René Descartes) We’ll consider these coordinates as a one line, on column matrix, that we can write down 1*2 (read matrix 1 cross 2) The general matrix M = A B C D is a 2 lines by 2 columns matrix and will be called 2*2 matrix Mathematically one can define the matrix multiplication following : (x’ y’) = (x y) * M = (A*x+c*y B*x+D*y) Any (x,y) point in the plane by (2X2) matrix has, as a transformed one, a new point in the plane (x’,y’) such as : x’ = A*x+C*y y’ = B*x+D*y Transformation depending on values given to A,B,C,D variables Scale changes Those transformations are controlled by that matrix A 0 0 D A term gives growing or reducing on the X-axis. D term gives growing or reducing on the Y-axis. . Nota Bene : A multiplication by the unity matrix will transform any point as itself. Unity matrix is 1 0 0 1 Symmetries Matrices controlling symmetries appear as special cases of a scale changing matrix with negative values of A and/or D -1 0 0 1 will create a symmetry on the Y-axis 1 0 0 -1 will create a symmetry on the Y-axis -1 0 0 -1 will create a symmetry on both axes, that is a centre symmetry to the origin Shearing This matrix 1 B 0 1 will create a shearing on Y. That matrix 1 0 C 1 will create a shearing on X. And 1 B C 1 will create a shearing on both directions Rotations This is the general model for a rotation matrix : cos(theta) sin(theta) -sin(theta) cos(theta) with theta as positive or negative rotation angle Translations Although translations are quite elementary transformations, the general pattern of a matrix cannot help realizing them. To pass this gap, one has to introduce so called homogenous coordinates. That will be the next hint. After thory, let’s enjoy the practice The following code will demonstrate the effects of a 2*2 matrix | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Bases mathématiques du graphisme à 3 dimensions Ven 5 Avr 2013 - 5:28 | |
| Salut tout le monde.
Me revoilà de retour ! Une vilaine tendinite au niveau de l’épaule droite m’empêche de torturer mon clavier. Et comme je suis moins rapide que la tortue (je tape avec un seul doigt, parfois même avec deux !), je vous laisse deviner la suite.
Je tiens à remercier Froggy One pour la peine qu’il a prise pour traduire mon texte en anglais. D’ailleurs, j’ai posté sur le Forum anglais la traduction et un programme de démo. Espérons que les English Members veillent bien réagir !
Froggy One, thank you very much for your translation !
I posted it on the English forum with a program of demonstration.
J'ai tout de même corrigé quelques erreurs d'inattention comme par exemple PLAN pour plan et non PLANE pour avion. Une fois de plus mille mercis !
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re Ven 5 Avr 2013 - 6:14 | |
| Content de te relire parmis nous Papydall ! Demandes donc à mon infirmière de te faire un massage... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Bases mathématiques du graphisme à 3 dimensions Ven 5 Avr 2013 - 6:21 | |
| Ma kiné (qui est ma fille) fait le nécessaire et je me porte un peu mieux. En tout cas , merci pour ton offre. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Bases mathématiques du graphisme à 3 dimensions Ven 5 Avr 2013 - 8:05 | |
| Bon je dévie tu sujet, mais quand même tu as de la chance d'avoir une fille kiné, quand même ... Remets toi bien. | |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Bases mathématiques du graphisme à 3 dimensions Ven 5 Avr 2013 - 10:57 | |
| @ Papydall Heureux de te savoir vaillant. Je sais que je plane parfois un peu, mais c'est bien PLANE pour un plan géométrique (ou un avion) et non PLAN qui signifie des plans, des projets... ou PLAIN qui veut dire simple, évident... ce qui ne l'était pas !!! ( désolé, je n'ai pas pu me retenir) | |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Bases mathématiques du graphisme à 3 dimensions Ven 5 Avr 2013 - 11:29 | |
| | |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Bases mathématiques Ven 5 Avr 2013 - 11:38 | |
| Voilà voilà...
Translations any translated point (x,y) has this form : x’ = x + M y’ = y + N But no multiplication by the 2*2 general matrix will allow us to find these relations. What can we do then? Obviously not give up! We will introduce a third component for (x,y) and (x’,y’) vectors that they became (x y 1) and (x4 y4 1). The transformation matrix has gone to become a (3X2) matrix for a matrix multiplication is exclusively possible if second matrix’ line number equals first one’s column number Be the new transformation matrix: 1 0 0 1 M N In these conditions, the matrix multiplication will give us : x’ = x + M y’ = y + N M coefficient creates a X-axis translation and N coefficient creates a Y-axis translation . That seems that we did solve the translation problem, but another problem appears. (3X2) matrix being not square, it has no inverse!!! And we do need a matrix inversion. Never mind! Matrix theory will help us! We can add a third column to (3X2) matrix that it became a square (3X3) one. 1 0 0 0 1 0 M N 1 This time, the matrix multiplication gives us: (x+M y+N 1) = (x’ y’ 1) A plane’s point’s position’s representation by a three-dimension vector un vecteur à trois dimensions is a homogenous coordinates’s one.
Let’s keep in mind Any point in a plane at a finite distance with (x,y)coordinates, has got a (x,y,1) triplet, or else, any (kx,ky,k) triplet (k being not null) for homogenous coordinates. Thus x’ = kx ; y’ = ky ; z’ = k We then deduce that x = x’/k et y = y’/k These are passage formulas from homogenous to Cartesian coordinates.
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Bases mathématiques du graphisme à 3 dimensions Ven 5 Avr 2013 - 12:31 | |
| Merci Froggy One. Thank you pour le plan ( PLANE). Moi, que mon English remonte à des décennies, j’ai cru faire le malin ; mais bon, je m’incline devant le spécialiste. | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Sam 6 Avr 2013 - 19:22 | |
| Alors là, c'est du très-très grand Papydall !!!!!!!!! Ce que c'est, quand même, d'avoir quelqu'un qu'à compris les maths autour de soi ! Je compte bien me pencher très sérieusement sur tout cela dans peu de temps... !! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| | | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Bases mathématiques du calcul en trois dimensions Mar 16 Avr 2013 - 15:47 | |
| J'avais cinq minutes alors j'ai traduit un petit bout...
Composing transformations All transformations presented up to this point, are centered to the origin of axes : the (0,0) point is thus invariant. After having seen translations, now we can solve this kind of problem: Which is the matrix for a transformation that makes a figure (e.g. a small rocket) turn around a definite point (x,y), by a definite angle called theta ? Homogenous coordinates will make it easier. First of all, let’s transform all (2x2) matrices into (3x3) ones. The general matrix A B C D becomes A B 0 C D 0 0 0 1 A rotation around an arbitrary point of the plane will be done by : 1- one translation from the centre of the rotation to the origin of axes 2- then the desired rotation 3- and one translation of the result to the initial rotation centre
NOTICE The order of operations has a great importance for a matrix multiplication is generally not commutative.
That is better doing all these three operations at one time. We will obtain (without rather painful details of the calculi) those formulas:
x’ = x*cos(theta) – y*sin(theta) – M*cos(theta) + N*sin(theta) + M y’ = x*sin(theta) + y*cos(theta) – M*sin(theta) –N*cos(theta) + N
Practically, you just have to read (M,N) coordinates of any rotation centre, and the value of theta rotation angle, then you apply these two formulas to all the points of the object. As a conclusion The general (3X3) matrix used with homogenous coordinates in the plane looks like : A B 1 C D 1 M N E This matrix can be divided into 4 parts, which one having a precise role : • A,B,C,D terms give les scale changes, rotations and shearing. • M and N terms give translations. • E terms gives a general, that is, uniform scale change by both axes. As a fact, the (x’,y’) cartesian coordinate is obtained by : x’ = x/E and y’ = y/E If E > 1 we get a reduction Else if E < 1 we get an increase
In the program given as an example, let’s set E to 1 and give A et D les convenient values for the scale change we desire. If A <> D both axes will not get the same scale change. Else if A = D the change will be uniform.
Take care Matrices' multiplication is generally not commutative. But, there is commutativity in those cases: • translation X translation • scale change X scale change • rotation X rotation • uniform scale change X rotation
After the theory let’s practice
This program permits plane transformations. As an example, let’s consider a small rocket on which we can operate all kinds of transformation. As a fact, to transform a figure yiu just have to transform all the points of this figure. For every point in the plane, having (x,y) coordinates, we will get, after transformation, (x’,y’) coordinates :
x’ = A*x + C*y + M y’ = B*x + D*y + N
NB : I admit that I am the worse designer ever known in mankind. Then, if my “rocket” doesn’t please you, let your imagination drive you to draw a better thing. To do so, you can draw your object on a quadrate sheet then put your (x,y) coordinates in line 34: DATA …
Voilà, le laitier est passé... bonne journée !!!
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Bases mathématiques du graphisme à 3 dimensions Mar 16 Avr 2013 - 20:05 | |
| Thank you very much, Froggy One. It is very kind of you. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Bases mathématiques du graphisme à 3 dimensions Mar 16 Avr 2013 - 20:38 | |
| Au fait Papydall si tu vas mieux, je te rappelle que tu nous a promis la suite .... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Bases mathématiques du graphisme à 3 dimensions Mer 17 Avr 2013 - 2:42 | |
| Voici un petit programme pour illustrer la projection d’un objet 3D sur l’écran 2D. L’objet considéré est un polyèdre représentant une petite maison. Le programme permet de réaliser 4 types de projections : • Projection perspective • Projection parallèle quelconque • Projection parallèle dimétrique • Projection isométrique - Code:
-
' ****************************************************************************** ' ' PROJECTION D'UN POLYEDRE AVEC CADRAGE AUTOMATIQUE SUR L'ECRAN ' PROJECTION.BAS par Papydall
' Adaptation d'un ancien programme en Basic Apple Soft pour l'Apple II ' La petite maison qui sert d'exemple n'est pas un tableau de maître mais elle ' illustre les différentes projections d'un objet 3D sur l'écran 2D ' ******************************************************************************
Run() end ' ****************************************************************************** SUB Run() Init() : Gui() END_SUB ' ****************************************************************************** SUB Init() label clic dim RH,PH,TH,v1,v2,v3,v4,w1,w2,w3,w4,D,x,y,z,c,xo,yo,zo ,xe,ye,u,u1,u2,n dim rep$, pi,rad,s1,s2,s3,s4,s5,s6,c1,c2,cx,cy
caption 0,"PROJECTION D'UN OBJET AVEC CADRAGE AUTOMATIQUE SUR L'ECRAN" pi = 4*atn(1) : rad = pi/180 cx = 300 : cy = 300 END_SUB ' ****************************************************************************** SUB GUI() container 1 : top 1,50 : left 1,50 : width 1,width(0)-100 : height 1,height(0)-100 alpha 3 : parent 3,1 : top 3,50 : left 3,50 : font_bold 3 caption 3,"VOULEZ-VOUS UNE PROJECTION ..." container_option 10: parent 10,1 : top 10,100 : left 10,20 : width 10,270 height 10,150 : font_bold 10 option 11 : parent 11,10 : top 11,20 : left 11,5 : width 11,250 caption 11,"VRAIE PERSPECTIVE" option 12 : parent 12,10 : top 12,50 : left 12,5 : width 12,250 caption 12,"PARALLELE QUELCONQUE" OPTION 13 : parent 13,10 : top 13,80 : left 13,5 : width 13,250 caption 13,"PARALLELE DIMETRIQUE" option 14 : parent 14,10 : top 14,110: left 14,5 : width 14,250 caption 14,"PARALLELE ISOMETRIQUE" on_click 11,clic : ' vraie perspective on_click 12,clic : ' parallèle quelconque on_click 13,clic : ' parallèle dimétrique on_click 14,clic : ' parallèle isométrique ' Form pour les tracés form 100 : width 100, 800 : height 100, 600 :hide 100 button 101 : parent 101,100 : top 101,500 : left 101,100 : caption 101,"Retour" on_click 101,clic ' ----------------------- button 200 : parent 200,1 : top 200,300 : left 200,100 : caption 200,"Quitter" on_click 200,clic END_SUB ' ****************************************************************************** clic: if clicked(11) > 0 then Perspective() : return if clicked(12) > 0 then Parallele_Quelconque() : return if clicked(13) > 0 then Parallele_Dimetrique() : return if clicked(14) > 0 then Parallele_Isometrique(): return if clicked(101)> 0 then hide 100 : return if clicked(200) > 0 then terminate return ' ****************************************************************************** SUB Perspective()
repeat rep$ = message_input$("VALEUR DE RHO", "RHO = " , "100") until numeric(rep$) > 0 RH = val(rep$) repeat rep$ = message_input$("ANGLE THETA EN DEGRES", "THETA = " , "70") until numeric(rep$) > 0 TH = val(rep$)
repeat rep$ = message_input$("ANGLE PHI EN DEGRES", "PHI = " , "50") until numeric(rep$) > 0 PH = val(rep$) D = 1 : n = 0 : caption 100,"Projection PERSPECTIVE" : Init_Calcul() END_SUB ' ****************************************************************************** SUB Parallele_Quelconque()
repeat rep$ = message_input$("ANGLE THETA EN DEGRES", "THETA = " , "70") until numeric(rep$) > 0 TH = val(rep$) repeat rep$ = message_input$("ANGLE PHI EN DEGRES", "PHI = " , "30") until numeric(rep$) > 0 PH = val(rep$) n = 2 : caption 100,"Projection PARALLELE QUELCONQUE" : Init_Calcul() END_SUB ' ****************************************************************************** SUB Parallele_Dimetrique() TH = 22.20765 : PH = 20.704811 : n = 3 caption 100,"Projection PARALLELE DIMETRIQUE" : Init_Calcul() END_SUB ' ****************************************************************************** SUB Parallele_Isometrique() TH = 45 : PH = 35.26439 : n = 4 caption 100,"Projection PARALLELE ISOMETRIQUE" : Init_Calcul() END_SUB ' ****************************************************************************** SUB Recherche_Fenetre_Projection() v1 = 1 : v2 = 278 : v3 = 1 : v4 = 190 w1 = power(10,20) : w2 = 0-power(10,20) : w3 = power(10,20) : w4 = 0-power(10,20) restore read x : read y : read z : read c while c <> -1 Transforme() if xe < w1 then w1 = xe if xe > w2 then w2 = xe if ye < w3 then w3 = ye if ye > w4 then w4 = ye read x : read y : read z : read c end_while ' calcul de 2 coefficient d'échelle u1 = (v2-v1) / (w2-w1) : u2 = (v4-v3) / (w4-w3) ' pour avoir une vue réelle et bien proportionnée de l'objet, on choisit pour ' coefficient de l'échelle unique U le plus petit de la paire (U1,U2) u = min(u1,u2) ' Deuxième lecture pour le tracé show 100 : 2d_target_is 100 : 2d_pen_color 0,0,0 restore while 1 = 1 read x : read y : read z : read c if c = -1 then fin() Transforme() x = cx+(xe-w1)*u+v1 : y = cy-((ye-w3)*u+v3) if c = 0 then 2d_poly_from x,y : else : 2d_poly_to x,y end_while END_SUB ' ****************************************************************************** SUB Init_Calcul() TH = TH*rad : ph = ph*rad s1 = sin(th) : c1 = cos(th) : s2 = sin(ph) : c2 = cos(ph) s3 = c1*s2 : s4 = s1*s2 : s5 = c1*c2 : s6 = s1*c2 Recherche_Fenetre_Projection() END_SUB ' ****************************************************************************** SUB Transforme() xo = 0-x*s1 + y*c1 : yo = 0-x*s3-y*s4+z*c2 if n <> 1 then xe = xo : ye = yo : exit_sub zo = 0-x*s5-y*s6-z*s2+rh xe = D *xo/zo : ye = D*yo/zo END_SUB ' ****************************************************************************** SUB Fin() end END_SUB ' ****************************************************************************** ' Sommets du polyèdre (ici une petite maison) ' On adopte la convention suivante : chaque sommet est identifié par un ' quadruplet de nombres (x,y,z,c) avec (x,y,z) coordonnées dans l'espace du sommet ' et c est un code qui peut valoir 0,1 ou -1 ' Si c = 0 cela signifie qu'il faut se deplacer vers le sommet concerné plume ' levée c.à.d 2D_POLY_FROM ' Si c = 1 , on se deplace vers le sommet concerné plume baissée c.à.d 2D_POLY_TO ' Si c = -1 on stoppe l'exécution du programme. ' -----------------------------------------------------------------------------
DATA 20,-27,-20,0 data 20,27,-20,1 data -20,27,-20,1 data -20,-27,-20,1 data 20,-27,-20,1 data 20,-27,0,1 data 20,27,0,1 data -20,27,0,1 data -20,-27,0,1 data 20,-27,0,1 data 0,-17,20,1 data -20,-27,0,1 data -20,-27,-20,1 data 0,-17,20,0 data 0,17,20,1 data 20,27,0,1 data 20,27,-20,1 data -20,27,-20,0 data -20,27,0,1 data 0,17,20,1 ' --------------- data 20,-27,0,0 data 23,-30,-2,1 data 23,30,-2,1 data 20,27,0,1 data 23,30,-2,0 data 23,30,-2,1 data -20,27,-2,1 data -23,30,0,1 data -23,-30,-2,1 data -20,-27,0,1 data -23,-30,-2,0 data 23,-30,-2,1 ' ---------------- data 20,-5,0,0 data 20,5,0,1 data 20,5,7,1 data 20,-5,7,1 data 20,-5,0,1 data 13,-5,7,1 data 20,-5,7,1 data 10,0,10,1 data 13,-5,7,1 data 13,5,7,1 data 10,0,10,1 data 20,5,7,1 data 13,5,7,1 data 20,5,0,1 data 20,4,0,0 data 20,4,7,1 data 20,0,7,0 data 20,0,0,1 data 20,-4,0,0 data 20,-4,7,1 data 20,-4,5,0 data 20,4,5,1 data 20,4,2,0 data 20,-4,2,1 ' Fenêtre de gauche data 20,-5,-19,0 data 20,-21,-19,1 data 20,-21,-4,1 data 20,-5,-4,1 data 20,-5,-19,1 data 20,-9,-19,0 data 20,-9,-5,1 data 20,-13,-5,0 data 20,-13,-19,1 data 20,-17,-19,0 data 20,-17,-5,1 data 20,-21,-5,0 data 20,-5,-5,1 data 20,-9,-9,0 data 20,-17,-9,1 data 20,-17,-15,0 data 20,-9,-15,1 ' Fenêtre de droite data 20,5,-19,0 data 20,21,-19,1 data 20,21,-4,1 data 20,5,-4,1 data 20,5,-19,1 data 20,9,-19,0 data 20,9,-5,1 data 20,13,-5,0 data 20,13,-19,1 data 20,17,-19,0 data 20,17,-5,1 data 20,21,-5,0 data 20,5,-5,1 data 20,9,-9,0 data 20,17,-9,1 data 20,17,15,0 data 20,9,-15,0 ' Fenêtre de latérale data -2,-15,22,0 data -2,-12,22,1 data -5,-12,22,1 data -5,-15,22,1 data -2,-15,22,1 data -2,-15,18,1 data -5,-15,15,1 data -5,-12,15,1 data -2,-12,18,1 data -2,-15,18,1 data -5,-15,22,0 data -5,-15,15,1 data -5,-12,15,0 data -5,-12,22,1 data -2,-12,22,0 data -2,-12,18,1 ' Cheminée data 8,27,-19,0 data -8,27,-19,1 data -8,27,-4,1 data 8,27,-4,1 data 8,27,-19,1 data 4,27,-19,1 data 4,27,-5,1 data 0,27,-5,0 data 0,27,-19,1 data -4,27,-19,0 data -4,27,-5,1 data -8,27,-5,0 data 8,27,-5,1 data 4,27,-9,0 data -4,27,-9,1 data -4,27,-15,0 data 4,27,-15,1 ' ------- data 0,0,0,-1 ' Fin DATA ' ******************************************************************************
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Bases mathématiques du graphisme à 3 dimensions Mer 17 Avr 2013 - 7:07 | |
| Ta mise en pratique est comme le tuto, super claire et efficace. Bravo Papydall. Si tu en as d'autres sous le coude du même genre, je crois que tu fera des heureux.
Je crois que pour le paysage fractal, tu utilisé un système pour ne tracer que les faces visibles ? Une procédure de ce type compléterait bien tes calculs (en dehors de la mise en pratique) pour une application à l'affichage 3D. Ce n'est pas quelque chose de simple non plus, mais bon tu sembles inspiré... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Bases mathématiques du graphisme à 3 dimensions Jeu 18 Avr 2013 - 0:15 | |
| | |
| | | Contenu sponsorisé
| Sujet: Re: Bases mathématiques du graphisme à 3 dimensions | |
| |
| | | | Bases mathématiques du graphisme à 3 dimensions | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |