FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Panoramic et ses curiosités
par Klaus Aujourd'hui à 2:20

» Synedit Parameters
par Klaus Aujourd'hui à 1:33

» Utilitaire de suppression de fichiers
par Yannick Hier à 23:03

» Code à vérifier SVP (Oups ! résolu)
par Jean Claude Jeu 22 Juin 2017 - 21:16

» Compilateur FBPano
par jean_debord Jeu 22 Juin 2017 - 9:56

» Bienvenue à Virtualalan !
par UltraVox Jeu 22 Juin 2017 - 9:18

» Concours de Morpions
par jjn4 Jeu 22 Juin 2017 - 0:04

» ShortName$(F) [Cloturé]
par papydall Mer 21 Juin 2017 - 16:19

» Remplacer espace par tiret dans noms des dossiers / fichiers
par papydall Mer 21 Juin 2017 - 15:27

» Menu personalisé avec icones et menu contextuel
par Laurent (Minibug) Mer 21 Juin 2017 - 12:44

» La liste des choses à faire ...
par Jack Mar 20 Juin 2017 - 22:49

» Quoi de neuf à propos de Goric 3D ? (@Jack)
par UltraVox Mar 20 Juin 2017 - 21:06

» Nom court et anti fenetre dos
par silverman Mar 20 Juin 2017 - 18:31

» Ludothèque Panoramic
par jjn4 Mar 20 Juin 2017 - 18:09

» Proposition à la communauté
par Yannick Mar 20 Juin 2017 - 15:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juin 2017
LunMarMerJeuVenSamDim
   1234
567891011
12131415161718
19202122232425
2627282930  
CalendrierCalendrier

Partagez | 
 

 Bases mathématiques du graphisme à 3 dimensions

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2  Suivant
AuteurMessage
papydall

avatar

Nombre de messages : 5384
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Bases mathématiques du graphisme à 3 dimensions   Lun 1 Avr 2013 - 2: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 !

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/ En ligne
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: Bases mathématiques du graphisme à 3 dimensions   Lun 1 Avr 2013 - 9:05

bonjour papydall
nous te souhaitons un prompt retablissement
bon courage Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1079
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Bases mathématiques du graphisme à 3 dimensions   Lun 1 Avr 2013 - 10:28

Bonjour Papydall Smile
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... Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5838
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Bases mathématiques du graphisme à 3 dimensions   Lun 1 Avr 2013 - 12: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 4933
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Bases mathématiques du graphisme à 3 dimensions   Lun 1 Avr 2013 - 21: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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Froggy One

avatar

Nombre de messages : 384
Date d'inscription : 06/01/2012

MessageSujet: Bases mathématiques du graphisme à 3 dimensions   Lun 1 Avr 2013 - 22: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) pale . Notre devise était : entraide et prospérité mutuelle.

Respect, Papydall. Je te souhaite un prompt rétablissement.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gaeldwest.wordpress.com
Froggy One

avatar

Nombre de messages : 384
Date d'inscription : 06/01/2012

MessageSujet: Bases mathématiques du graphisme à 3 dimensions    Mar 2 Avr 2013 - 8:25

No 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... Sleep Bonne journée !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gaeldwest.wordpress.com
Jicehel

avatar

Nombre de messages : 5838
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Bases mathématiques du graphisme à 3 dimensions   Mar 2 Avr 2013 - 8: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Froggy One

avatar

Nombre de messages : 384
Date d'inscription : 06/01/2012

MessageSujet: Bases mathématiques du graphisme à 3 dimensions   Mar 2 Avr 2013 - 12:59

cyclops Voici un petit début de traduction, l'auteur se reconnaîtra. Shocked 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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gaeldwest.wordpress.com
papydall

avatar

Nombre de messages : 5384
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Bases mathématiques du graphisme à 3 dimensions   Ven 5 Avr 2013 - 6: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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/ En ligne
Yannick

avatar

Nombre de messages : 7825
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: Re   Ven 5 Avr 2013 - 7:14

cheers Content de te relire parmis nous Papydall !

Demandes donc à mon infirmière de te faire un massage... Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5384
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Bases mathématiques du graphisme à 3 dimensions   Ven 5 Avr 2013 - 7: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. flower
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/ En ligne
Jicehel

avatar

Nombre de messages : 5838
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Bases mathématiques du graphisme à 3 dimensions   Ven 5 Avr 2013 - 9:05

Bon je dévie tu sujet, mais quand même tu as de la chance d'avoir une fille kiné, quand même ... Very Happy Remets toi bien.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Froggy One

avatar

Nombre de messages : 384
Date d'inscription : 06/01/2012

MessageSujet: Bases mathématiques du graphisme à 3 dimensions   Ven 5 Avr 2013 - 11:57

@ Papydall

Heureux de te savoir vaillant.

study 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 !!! ( Laughing désolé, je n'ai pas pu me retenir)

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gaeldwest.wordpress.com
Froggy One

avatar

Nombre de messages : 384
Date d'inscription : 06/01/2012

MessageSujet: Bases mathématiques du graphisme à 3 dimensions   Ven 5 Avr 2013 - 12:29

La suite arrive...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gaeldwest.wordpress.com
Froggy One

avatar

Nombre de messages : 384
Date d'inscription : 06/01/2012

MessageSujet: Bases mathématiques   Ven 5 Avr 2013 - 12: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gaeldwest.wordpress.com
papydall

avatar

Nombre de messages : 5384
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Bases mathématiques du graphisme à 3 dimensions   Ven 5 Avr 2013 - 13: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. Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/ En ligne
jjn4

avatar

Nombre de messages : 1592
Date d'inscription : 13/09/2009

MessageSujet: +++   Sam 6 Avr 2013 - 20: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... !!
scratch alien scratch
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jjn4.e-monsite.com
Yannick

avatar

Nombre de messages : 7825
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Sam 6 Avr 2013 - 22:02

Oui mais... il triche...

En Tunisie, ils n' ont pas besoin de radiateur au fond de la classe !...

lol! lol! lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Froggy One

avatar

Nombre de messages : 384
Date d'inscription : 06/01/2012

MessageSujet: Bases mathématiques du calcul en trois dimensions   Mar 16 Avr 2013 - 16: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 !!!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gaeldwest.wordpress.com
papydall

avatar

Nombre de messages : 5384
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Bases mathématiques du graphisme à 3 dimensions   Mar 16 Avr 2013 - 21:05

Thank you very much, Froggy One.
It is very kind of you.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/ En ligne
Jicehel

avatar

Nombre de messages : 5838
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Bases mathématiques du graphisme à 3 dimensions   Mar 16 Avr 2013 - 21:38

Au fait Papydall si tu vas mieux, je te rappelle que tu nous a promis la suite .... Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5384
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Bases mathématiques du graphisme à 3 dimensions   Mer 17 Avr 2013 - 3: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
' ******************************************************************************
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/ En ligne
Jicehel

avatar

Nombre de messages : 5838
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Bases mathématiques du graphisme à 3 dimensions   Mer 17 Avr 2013 - 8: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é...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5384
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Bases mathématiques du graphisme à 3 dimensions   Jeu 18 Avr 2013 - 1:15

En attendant, voilà quelque chose à se mettre sous la dent : à croquer avec modération !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/ En ligne
Contenu sponsorisé




MessageSujet: Re: Bases mathématiques du graphisme à 3 dimensions   

Revenir en haut Aller en bas
 
Bases mathématiques du graphisme à 3 dimensions
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» [Résolu] Qui pourrais trouver la reponse
» Scripts par catégories
» Bug avec la priorité des opérations arithmétiques ?
» [résolu]Besoin d'aide : Mathématiques : utilisation du sinus
» mathématiques,gm6 dmon porjet pour vous montrer les buggs !

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC 32 bits :: Vos sources, vos utilitaires à partager-
Sauter vers: