Quatrième coordonée en programmation 3D

Discutez d'informatique ici !
jtruc34
Messages: 6
Enregistré le: 26 Fév 2012, 14:31

Quatrième coordonée en programmation 3D

par jtruc34 » 11 Mar 2012, 11:54

Bonjour,
j'aimerais savoir à quoi sert la quatrième coordonée en programmation 3D, et aussi qu'est-ce qu'elle représente. On m'a dis qu'elle pouvait servir dans les matrices de rotations, mais il y a aussi d'autre utilités que je n'ai pas comprises.

Merci de me répondre clairement.



Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 12:39

par Dlzlogic » 11 Mar 2012, 12:56

jtruc34 a écrit:Bonjour,
j'aimerais savoir à quoi sert la quatrième coordonée en programmation 3D, et aussi qu'est-ce qu'elle représente. On m'a dis qu'elle pouvait servir dans les matrices de rotations, mais il y a aussi d'autre utilités que je n'ai pas comprises.

Merci de me répondre clairement.

Bonjour,
Moi je veux bien vous répondre clairement, mais il faudrait que la question soit claire.
1- c'est quoi la quatrième coordonnées ? La seule réponse que je vois, c'est le temps.
2- qu'est-ce que vous appelez la programmation 3D. Il y a programmation d'une part et espace de travail d'autre part.
3- Je ne vois pas ce que viendrait faire la matrice de rotation dans l'histoire. Si vous travaillez en 2D, les matrices de transformation seront 2x2, si vous travaillez en 3D, elles seront 3x3.

Bref, j'ai rien compris à votre question.

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 11 Mar 2012, 14:08

salut,

La 4eme sert pour les translations. voir wiki
la vie est une fête :)

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 12:39

par Dlzlogic » 11 Mar 2012, 14:20

fatal_error a écrit:salut,

La 4eme sert pour les translations. voir wiki

Oui, mais ce n'est pas "une quatrième coordonnée" mais "une quatrième colonne" ou "un quatrième vecteur".

st00pid_n00b
Membre Relatif
Messages: 251
Enregistré le: 03 Fév 2012, 19:54

par st00pid_n00b » 11 Mar 2012, 14:34

Bonjour,

Comme tu le sais, les matrices représentent les applications linéaires, qui laissent l'origine inchangée. En programmation 3D, on a besoin de faire des transformations affines de l'espace 3D.

Si on se contente de multiplier des vecteurs à 3 coordonnées par des matrices 3x3 on peut faire entre autres des rotations et des homothéties de centre l'origine.

Mais on ne peut pas faire de translations ou de rotations/homothéties de centre autre que l'origine.

Une transformation affine peut s'écrire:
u' = Au + t

A étant une matrice 3x3 (partie linéaire) et t un vecteur. Cela oblige à stocker chaque transformation comme une paire (A; t). De plus, en programmation 3D on fait la distinction entre les points (par exemple une position, affectée par une translation) et les vecteurs (par exemple une vitesse, inchangée par une translation mais modifiée par une rotation.) Il faut donc savoir si u représente un point ou un vecteur pour décider si on fait:
u' = Au (vecteur)
ou u' = Au + t (point)

L'astuce consiste à utiliser des vecteurs 4D et des matrices 4x4. Mathématiquement, cela revient à faire de la géométrie projective. Les points sont stockés sous la forme (x; y; z; 1) et les vecteurs sous la forme (x; y; z; 0). Les transformations sont de simples matrices 4x4. On les applique en faisant u' = Au, que u soit un point ou un vecteur. De plus, la composition est une simple multiplication de matrices.

Pour comprendre comment ça marche, vois le lien de fatal_error. La partie linéaire est le carré 3x3 "en haut à gauche" de la matrice 4x4, la translation t est dans la 4ème colonne, et la 4ème ligne est toujours (0 0 0 1). Tu peux demander si tu souhaites des explications plus détaillées.

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 12:39

par Dlzlogic » 12 Mar 2012, 12:31

Bonjour,
J'ai soigneusement lu tout ça.
La transformation qui décrit dans le plan 2D (ce serait pareil en 3D avec une ligne de plus)
X = DX + C.x + S.y
Y = DY + S.x - C.y
Est une application linéaire ou une transformation affine ?
On remarque qu'il existe une infinité de paramètres (DX,TX,C,S) qui associent les points p(x,y) et P(X,Y)

Y a-t-il une différence de dénomination avec
X = DX + XX.x + XY.y
Y = DY + YX.x + YY.y
Qu j'appelle transformation affine.
Il n'existe qu'un groupe de paramètre (DX, DY,XX,XY,YX,YY) qui associe les points p(x,y) et P(X,Y).

st00pid_n00b
Membre Relatif
Messages: 251
Enregistré le: 03 Fév 2012, 19:54

par st00pid_n00b » 12 Mar 2012, 14:28

Bonjour Dlzlogic,

J'avoue ne pas très bien comprendre ton message. Si DX et DY sont des constantes, alors oui c'est une transformation affine. Dans une transformation affine, les coordonnées d'arrivée sont des combinaisons linéaires des coordonnées de départ, plus une constante. Si les constantes sont toutes nulles, alors c'est une transformation linéaire.

Si tu te donnes juste un point p(x,y) et son image P(X,Y), il y a une infinité de transformations linéaires/affines qui transforment p en P.

Ton premier exemple est-il une rotation de centre autre que l'origine? Quant au deuxième je n'ai aucune idée de ce qu'il représente.

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 12:39

par Dlzlogic » 12 Mar 2012, 15:36

Merci de réagir.
Il est vrai que je me place dans un contexte d'utilisation et non théorique. Mais comme on fait appel aux maths, il faut être d'accord dans la signification des termes.
J'appelle transformation géométrique l'application qui à une figure F que l'appelle "de départ" une figure F' que j'appelle "d'arrivée".
On utilise 4 transformations
1- la translation
2- la rotation
3- l'homothétie
4- l'affinité.
L'inversion ne nous intéresse pas.
La similitude est le produit des 3 premières. Cette transformation conserve les angles et les rapports de distances. On l'appelle quelque fois "changement de base". Etant donné une figure de départ et une figure d'arrivée, il existe une infinité de similitudes qui permettent de passer de l'une à l'autre. L'une d'elle étant telle que DX et DY sont nuls, c'est donc une transformation linéaire. En d'autres termes, quelle que soit l'écriture, elle est identique à une transformation linéaire, dont elle est linéaire. (ceci est mon affirmation personnelle).

X = DX + XX.x + XY.y
Y = DY + YX.x + YY.y
Cette transformation est une transformation affine. Soient deux figures F et F', telles que définies plus haut, il n'existe qu'une transformation et une seule qui permette de passer de l'une à l'autre. C'est le produit des 4 transformations élémentaires. On pourrait discuter de ses avantages et de ses inconvénients, mais ce serait hors-sujet.
Cette transformation ne conserve ni les angles ni les rapports de distance mais elle conserve le parallélisme. Il me parait étonnant qu'on lui donne le même nom que la similitude.

Concernant la question d'origine, l'expression "quatrième coordonnée" me gène beaucoup.
Quand on travaille en 2.D, on a 2 coordonnées, quand on travaille en 3D on a 3 coordonnées.
Si on a 4 coordonnées, on travaille en 4 dimensions, ça ne me gène pas particulièrement, sauf quand on parle "d'astuce".
En 2D une matrice de rotation sera de la forme
1 1
1 -1
Une matrice de translation sera de la forme
1
1
Si on applique la translation la composition se fait par addition et non produit. C'est une caractéristique de la translation et je n'ai toujours pas compris, même si je l'ai admis, que cette caractéristique fasse migrer une transformation de l'ensemble des applications linéaires vers l'ensemble des applications affines.

On m'objectera certainement que je veux jouer sur les termes. Mais une chose est sûr : je développe (programmation) en 2D et j'ai 2 coordonnées, en 3D et j'ai 3 coordonnées, la translation n'a rien à voir, en tout cas dans mes développements.

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 12 Mar 2012, 16:16

On m'objectera certainement que je veux jouer sur les termes. Mais une chose est sûr : je développe (programmation) en 2D et j'ai 2 coordonnées, en 3D et j'ai 3 coordonnées, la translation n'a rien à voir, en tout cas dans mes développements.


impose pas aux autres tes habitudes de developpement.
Le fait est que comme precise dans le lien plus haut c'est utilise.

st00pid_n00b ten diras pe plus sur la geometrie projective.
la vie est une fête :)

st00pid_n00b
Membre Relatif
Messages: 251
Enregistré le: 03 Fév 2012, 19:54

par st00pid_n00b » 12 Mar 2012, 19:21

Dlzlogic a écrit:Merci de réagir.
Il est vrai que je me place dans un contexte d'utilisation et non théorique. Mais comme on fait appel aux maths, il faut être d'accord dans la signification des termes.
J'appelle transformation géométrique l'application qui à une figure F que l'appelle "de départ" une figure F' que j'appelle "d'arrivée".
On utilise 4 transformations
1- la translation
2- la rotation
3- l'homothétie
4- l'affinité.
L'inversion ne nous intéresse pas.
La similitude est le produit des 3 premières. Cette transformation conserve les angles et les rapports de distances. On l'appelle quelque fois "changement de base".

Ok jusqu'ici, mis à part qu'il te manque les symétries. Tu te limites aux similitudes directes (qui conservent l'orientation.)

Dlzlogic a écrit:Etant donné une figure de départ et une figure d'arrivée, il existe une infinité de similitudes qui permettent de passer de l'une à l'autre. L'une d'elle étant telle que DX et DY sont nuls, c'est donc une transformation linéaire. En d'autres termes, quelle que soit l'écriture, elle est identique à une transformation linéaire, dont elle est linéaire. (ceci est mon affirmation personnelle).

Là je ne suis pas d'accord. Pour peu que ta figure F aie suffisamment de points, la similitude est unique. Et si l'origine est modifiée par la transformation, DX et DY ne peuvent pas être nuls. L'exemple le plus simple est une translation de vecteur non nul: ce n'est pas une transformation linéaire.

Dlzlogic a écrit:X = DX + XX.x + XY.y
Y = DY + YX.x + YY.y
Cette transformation est une transformation affine. Soient deux figures F et F', telles que définies plus haut, il n'existe qu'une transformation et une seule qui permette de passer de l'une à l'autre. C'est le produit des 4 transformations élémentaires. On pourrait discuter de ses avantages et de ses inconvénients, mais ce serait hors-sujet.
Cette transformation ne conserve ni les angles ni les rapports de distance mais elle conserve le parallélisme. Il me parait étonnant qu'on lui donne le même nom que la similitude.

D'accord, c'est une transformation affine. Maintenant tu dis qu'elle est unique, j'ai un peu de mal à te suivre. Ce n'est pas forcément une similitude, je ne sais pas où tu as lu qu'on l'appelait comme ça.

Dlzlogic a écrit:Concernant la question d'origine, l'expression "quatrième coordonnée" me gène beaucoup.
Quand on travaille en 2.D, on a 2 coordonnées, quand on travaille en 3D on a 3 coordonnées.
Si on a 4 coordonnées, on travaille en 4 dimensions, ça ne me gène pas particulièrement, sauf quand on parle "d'astuce".
En 2D une matrice de rotation sera de la forme
1 1
1 -1
Une matrice de translation sera de la forme
1
1
Si on applique la translation la composition se fait par addition et non produit. C'est une caractéristique de la translation et je n'ai toujours pas compris, même si je l'ai admis, que cette caractéristique fasse migrer une transformation de l'ensemble des applications linéaires vers l'ensemble des applications affines.

On m'objectera certainement que je veux jouer sur les termes. Mais une chose est sûr : je développe (programmation) en 2D et j'ai 2 coordonnées, en 3D et j'ai 3 coordonnées, la translation n'a rien à voir, en tout cas dans mes développements.

On n'est pas obligé de rajouter une coordonnée. Relis mon premier post: quand je dis qu'une transformation affine peut être stockée sous la forme (A; t), en 2D A est une matrice 2x2 et t un vecteur (2 coordonnées.) Cela fait 6 paramètres qui sont les mêmes que ceux que tu mentionnes.

Quand j'écris:
u' = Au + t
C'est la même chose que:
X = DX + XX.x + XY.y
Y = DY + YX.x + YY.y

J'ai ensuite donné les avantages d'utiliser une coordonnée supplémentaire, qui sont principalement d'avoir un code plus concis et élégant.

Si tu veux une interprétation plus visuelle, toujours en 2D, on se place dans un espace 3D et on travaille dans le plan d'équation z=1. Ainsi, les points de ce plan sont de la forme (x; y; 1), et les vecteurs parallèles à ce plan (vitesses, vecteurs normaux, etc) de la forme (x; y; 0).

On s'intéresse aux transformations linéaires de l'espace telles que l'image du plan z=1 soit dans le plan z=1. Cela impose que la 3ème ligne de la matrice soit (0 0 1). On peut alors représenter une translation dans ce plan de vecteur (tx; ty) par la matrice:

Tu remarqueras que multiplier cette matrice par un point (x; y; 1) donne comme image (x + tx; y + ty; 1) , et que la multiplier par un vecteur (x; y; 0) donne (x; y; 0). (Les vecteurs sont bien inchangés.)

Autre remarque: ceci est une transformation linéaire de l'espace 3D, ce n'est donc pas une translation dans l'espace. Mais sa restriction au plan z=1 donne bien une translation.

jtruc34
Messages: 6
Enregistré le: 26 Fév 2012, 14:31

par jtruc34 » 19 Mar 2012, 12:57

Bonjour,

merci de ces nombreuses réponses mais j'ai aussi vu quelque part le W-Buffer et je n'ai pas compris quel rapport il a avec la quatrième coordonée. Est-ce que quelqu'un peut m'éclairer ?

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 5 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite