IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

Matrice 3d & 4d : transformation


Sujet :

Mathématiques

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 816
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 816
    Points : 7 648
    Points
    7 648
    Par défaut
    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?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut
    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.

  4. #4
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 816
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 816
    Points : 7 648
    Points
    7 648
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    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

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 585
    Points : 1 560
    Points
    1 560
    Par défaut
    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.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut
    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:
    | 1 | 0 | 0 |
    | 0 | 1 | -1 |
    | 0 | 1 | 0 |
    Merci d'avance.

Discussions similaires

  1. Transformation matrice / table
    Par spirou33 dans le forum Access
    Réponses: 6
    Dernier message: 25/10/2007, 17h28
  2. Transformation tableau en matrice
    Par at_first dans le forum Access
    Réponses: 2
    Dernier message: 09/10/2006, 14h02
  3. Transformer une matrice à une image
    Par stiko83 dans le forum C++
    Réponses: 24
    Dernier message: 02/08/2006, 00h11
  4. Réponses: 18
    Dernier message: 24/07/2006, 20h30
  5. Moteur 2D: Pb de calcul de Matrice de transformation
    Par themadmax dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 29/06/2006, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo