Précédent   Forum des professionnels en informatique > Autres langages > Algorithmes > Mathématiques
Mathématiques Forum d'entraide sur les mathématiques et l'algorithmique numérique. Avant de poster : Cours d'algorithmique numérique
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/01/2012, 21h43   #1
Membre régulier
 
Inscription : février 2006
Messages : 318
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 318
Points : 74
Points : 74
Par défaut Matrice 3d & 4d : transformation

Bonjour,

J'ai différents points 4D (X, Y, Z et W) et je les transforment grâce à des matrices 4x4:

Code :
1
2
3
transformedPoints[x] = points[x]*viewMatrix*projectionMatrix;
transformedPoints[x] = transformedPoints[x] / transformedPoints[x].W;
....
Ensuite, j'aimerais transformer uniquement les coordonnées X et Y des 'transformedPoints'.
J'ai donc pour ce faire une matrice 3x3 (je n'utilise pas une matrice 2x2 car je dois faire des translations). Problème: on ne sais pas multiplier une matrice 3x3 avec un point 4D. Je transforme donc ma matrice 3x3 en une matrice 4x4:
Code :
1
2
3
4
5
Matrix4x4 matrice2DTransform(
m3x3.e11,m3x3.e12, 0.0, m3x3.e13,
m3x3.e21, m3x3.e22, 0.0, m3x3.e23,
0.0, 0.0, 1.0, 0.0,
m3x3.e31, m3x3.e32, 0.0, m3x3.e33);
Maintenant, je peux faire ceci:
Code :
1
2
3
....
transformedPoints[x] = transformedPoints[x]*matrice2DTransform;
transformedPoints[x] = transformedPoints[x] / transformedPoints[x].W;
Problème: "transformedPoints[x].W" ne vaut pas "1" et donc la composante "Z" de mon point va être transformé. La matrice "matrice2DTransform" n'est censé me modifier que les composantes X et Y de mes points vu que c'est une matrice de transformation 2D à la base...mais ça n'est pas le cas.
Où est mon erreur dans ma façon de faire ?

Merci d'avance.
zenux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 19h26   #2
Expert Confirmé Sénior
 
Jean-Michel BORLOT
Fabricant et casseur d'avions
Inscription : avril 2004
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Jean-Michel BORLOT
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Fabricant et casseur d'avions
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : avril 2004
Messages : 2 984
Points : 4 691
Points : 4 691
Salut

Citation:
Envoyé par zenux Voir le message
Problème: "transformedPoints[x].W" ne vaut pas "1" et donc la composante "Z" de mon point va être transformé.

Euh... chez moi, 0*X+0*Y+1*Z+0*W, ça fait Z... donc pas de transformation... où est-ce que tu as ta transformée?
__________________
"Errare humanum est, sed perseverare diabolicum"

Si vous avez un terrain constructible dans l'est du Gers à vendre pas trop cher, contactez-moi par MP.

Ma page sur DVP.com : articles Java/Jogl
Mon site www.plegat.org
plegat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 19h54   #3
Membre régulier
 
Inscription : février 2006
Messages : 318
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 318
Points : 74
Points : 74
Merci pour votre réponse.

La formule "0*X+0*Y+1*Z+0*W" permet de caculer Z et pas W et donc en effet, Z vaudra Z après transformation avec la matrice "matrice2DTransform" vu qu'elle ne touche qu'a X et Y et W.

Le problème, c'est que j'ai un point 4D: X, Y, Z, W et pour obtenir un point 3D, je dois diviser ces trois premières composantes par W.
Donc => Z = Z / W. A ce moment là ma matrice "matrice2DTransform" à une influence sur Z vu que W<>1.

Y a-til moyen de transformer ma matrice 3x3 en une matrice 4x4 sans qu'elle ne touche à W et à Z afin de ne modifier que X et Y.
zenux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 22h54   #4
Expert Confirmé Sénior
 
Jean-Michel BORLOT
Fabricant et casseur d'avions
Inscription : avril 2004
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Jean-Michel BORLOT
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Fabricant et casseur d'avions
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : avril 2004
Messages : 2 984
Points : 4 691
Points : 4 691
Ok, c'est le Z final...

Il faudrait de toute façon revoir ta matrice 4x4, là elle n'est pas bonne. En général, pour les transformations, une matrice 4x4 peut se décomposer en:
  • une matrice de rotation, en prenant le premier carré 3x3
  • un vecteur translation, en prenant les 3 premiers termes de la quatrième colonne
  • une mise à l'échelle, en prenant les 3 premiers termes de la diagonale (en mettant la rotation de côté)
  • la quatrième ligne est généralement laissée à (0,0,0,1)

donc là, si tu ne dois toucher qu'aux X et Y, ça donnerait plutôt une matrice du genre:

Code :
1
2
3
4
5
Matrix4x4 matrice2DTransform(
m3x3.e11,m3x3.e12, 0.0, m3x3.e13,
m3x3.e21, m3x3.e22, 0.0, m3x3.e23,
0.0, 0.0, 1.0, m3x3.e33,
0.0, 0.0, 0.0, 1.0);
Avec ça, tu as une rotation autour de Z (qui transformera tes X et Y), et une translation de vecteur (e13,e23,e33).

Des liens pour approfondir: wikipedia et bien évidemment la FAQ Matrices du site
__________________
"Errare humanum est, sed perseverare diabolicum"

Si vous avez un terrain constructible dans l'est du Gers à vendre pas trop cher, contactez-moi par MP.

Ma page sur DVP.com : articles Java/Jogl
Mon site www.plegat.org
plegat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 14h05   #5
Rédacteur/Modérateur
 
Jean-Marc Blanc
Inscription : avril 2007
Messages : 2 658
Détails du profil
Informations personnelles :
Nom : Jean-Marc Blanc
Âge : 71

Informations forums :
Inscription : avril 2007
Messages : 2 658
Points : 3 496
Points : 3 496
Salut!
Citation:
Matrice 3d & 4d
Matrice est un terme d'algèbre linéaire défini comme "ensemble ordonné de m x n éléments, représenté par un tableau de m lignes et n colonnes". Des matrices 3d & 4d, ça n'existe pas. Dans ton cas, je pense qu'il s'agit plutôt de tableaux.
Jean-Marc Blanc
__________________
Calcul numérique de processus industriels
Formation, conseil, développement

Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)
FR119492 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 14h18   #6
Membre chevronné
 
Homme
Inscription : mars 2011
Messages : 433
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 433
Points : 792
Points : 792
Citation:
Envoyé par FR119492 Voir le message
Salut!

Matrice est un terme d'algèbre linéaire défini comme "ensemble ordonné de m x n éléments, représenté par un tableau de m lignes et n colonnes". Des matrices 3d & 4d, ça n'existe pas. Dans ton cas, je pense qu'il s'agit plutôt de tableaux.
Jean-Marc Blanc
Dans le contexte, il s'agit d'un abus de langage pour désigner des matrices 3x3 ou 4x4.
__________________
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry
pyros est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 21h48   #7
Membre régulier
 
Inscription : février 2006
Messages : 318
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 318
Points : 74
Points : 74
Merci pour vos réponses et les éclaircissements.

Afin de faire ma transformation des points 2D (X, Y et W), je vois mal comment je pourrais me passer de m3x3.e32 (l'élement qui fait tout foiré quand je transforme ma matrice 3x3 en matrice 4x4).

J'ai un trapèze définit par 4 points: http://www.comp.nus.edu.sg/~tants/ts...erivation6.jpg
Pour info, ce trapèze est symétrique sur l'axe Y (donc les pointillé sur l'image forme un angle droit).

J'aimerais trouver une matrice 3x3 qui me transforme ces points afin que mon trapèze devienne un rectangle (comme indiqué par les flèches en rouge sur l'image).
Comment faire sans utiliser m3x3.e31 et m3x3.e32 ?

Voici ma matrice qui permet cette transformation mais qui utilise m3x3.e32:
Citation:
| 1 | 0 | 0 |
| 0 | 1 | -1 |
| 0 | 1 | 0 |
Merci d'avance.
zenux est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h23.


 
 
 
 
Partenaires

Hébergement Web