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

Algorithmes et structures de données Discussion :

Comprendre les matrices 3D


Sujet :

Algorithmes et structures de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 21
    Par défaut Comprendre les matrices 3D
    Salut a tous...

    Voila... après quelques jours de recherches sur internet, j'ai trouvé beaucoup de sites qui montrent comment utiliser les matrices 3D de rotation, de translation ou de zoom (un bon site pour ceux que ca interresse : http://lab.erasme.org/3d/base.html ). Perso, c'est a peine si j'ai réussit a les utiliser (j'ai pas trop essayé non plus).

    Ce que j'aimerai bien, c'est savoir pourquoi ces matrices sont comme ca... et j'ai pas réussit a trouver de sites qui m'explique.... alors si quelqu'un avait une petite adresse ou un petit tuto, ce serait sympas de partager .


    PS : quelqu'un peut m'expliquer a quoi sert l'opérateur >> au passage ? (Ils s'en servent dans la page donc j'ai donné l'adresse)

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    Citation Envoyé par tavman
    Ce que j'aimerai bien, c'est savoir pourquoi ces matrices sont comme ca...
    comment "comme ça" ? carrées ? 4x4 ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 21
    Par défaut
    Non : ca j'ai très bien compris qu'on avait besoin d'une matrice 4x4 pour obtenir le scale (enfin déduire la taille).

    Ce que j'aimerai comprendre, c'est d'ou sortent les sinus et cosinus dans les matrices de rotations et ensuite, comment je fait pour utiliser les matrices 4x4 pour obtenir les positions et la taille sur l'écran...

  4. #4
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 818
    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 818
    Par défaut
    salut,

    Citation Envoyé par tavman
    Ce que j'aimerai comprendre, c'est d'ou sortent les sinus et cosinus dans les matrices de rotations et ensuite, comment je fait pour utiliser les matrices 4x4 pour obtenir les positions et la taille sur l'écran...
    Pour faire simple, ces matrices sont des matrices de passage d'un repère de ton espace initial vers le repère de l'espace après transformation (ou inversement, ça dépend quelle matrice tu prends). En gros, les coefficients que tu y trouves sont les coordonnées des vecteurs qui définissent le repère d'un des espace, exprimé dans le repère de l'autre espace. Et c'est vecteurs "transformés" s'expriment souvent avec toute une combinaison de cosinus, de sinus, avec les angles des rotations, ...

    Exemple en 2D:

    rotation d'angle alpha, repère initial (x,y), transformé (x',y')
    tu as:
    x'=x cos(alpha)+y sin(alpha)
    y'=-x sin(alpha)+y cos(alpha)

    en matriciel ça te donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    |x'|=|cos(alpha)   sin(alpha)|.|x|
    |y'| |-sin(alpha)  cos(alpha)| |y|
    y'a plus qu'à adapter pour la 3D, et rajouter le coef pour le "scale".

    Pour leur utilisation, il te suffit de faire des produits matriciels avec les coordonnées de tes points, vecteurs... pour avoir les nouvelles coordonnées après transformation.

    Pour plus d'infos, voir les sites de math.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 417
    Par défaut
    Si on veut vraiment comprendre pourquoi on utilise des matrices 4x4, je crois indispensable d'avoir quelques rudiments de géométrie projective. En fait, l'espace dans lequel on modèlise la 3D n'est pas l'espace euclidien R^3, mais l'espace projectif RP^3. La géométrie projective remonte à Desargues (17eme siècle). Elle a été inspirée aux mathématiciens par l'observation des peintres qui à partir de la Renaissance se sont mis à faire de la perspective. La 3D est bien effectivement essentiellement un problème de perspective.

    La raison pour laquelle on utilise RP^3 plutôt que R^3 est que les matrices 3x3 ne permettent de représenter que les transformations vectorielles de R^3. De nombreuses transformations géométriques naturelles ne sont pas vectorielles, comme les translations par exemple. Par contre, R^3 pouvant s'identifier à une partie de RP^3, les transformations homographiques de RP^3 qui laissent R^3 globalement invariant, couvrent non seulement les transformations vectorielles de R^3, mais aussi d'autres transformations, dont les translations. Le fait d'utiliser RP^3 permet donc d'unifier dans une représentation unique toutes ces transformations.

    Dans l'espace projectif RP^3 (qui n'est pas un espace vectoriel), les points sont repérés par 4 coordonées homogènes: (x,y,z,t), où homogène veut dire que x, y, z et t ne sont pas tous nuls, et que si a est un réel non nul, le quadruplet (ax,ay,az,at) représente le même point de RP^3. Il y a donc exactement un point de RP^3 pour chaque droite vectorielle de R^4. D'ailleurs la définition de RP^3 consiste tout simplement à dire que c'est l'ensemble des droites vectorielles de R^4.

    On plonge R^3 dans RP^3 en envoyant (x,y,z) sur (x,y,z,1). Les points de RP^3 qui sont de la forme (x,y,z,0) sont précisément ceux qui ne sont pas dans R^3. On les appelle des points à l'infini. RP^3 n'est donc rien d'autre que R^3 auquel on a jouté ces points à l'infini. Remarquer que dans le quadruplet (x,y,z,0) x, y et z ne peuvent pas être simultanément nuls, ce qui implique que le triplet (x,y,z) définit une direction dans R^3. Il y a donc exactement un point à l'infini par direction de R^3. Remarquer aussi que si un point (x,y,z,t) de RP^3 n'est pas à l'infini (c'est à dire si t n'est pas nul), le point correspondant de R^3 est (x/t,y/t,z/t).

    Le fait que les matrices qui sont données en exemple dans http://lab.erasme.org/3d/base.html aient toutes une dernière ligne de la forme (0 0 0 1) signifie que ces transformations laissent à l'infini les points qui y sont déjà, autrement-dit qu'elles représentent des transformations de R^3. Si on met quelquechose de non nul à la place des trois zéros, on échange des points à l'infini avec des points à distance finie (effet visuel garanti).

    Je pense que comprendre cette notion de point à l'infini est la base pour la compréhension des mécanismes de la 3D et du rôle particulier que joue la quatrième coordonnée.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 21
    Par défaut
    wow... Eh beh on peut dire que vous me donnez matière a réfléchir... Je sent que mes neuronnes vont griller.

    En tout cas, je vous remercis pour le coup de main... maintenant, je comprend mieux l'obligation d'utiliser des matrices 4x4 et non 3x3, et ensuite, je pensait pas que les matrices étaient tout simplement tiré de la rotation en 2D, mais c'est plutot logique en fait... car si je fait une rotation de l'axe des X en 3D, ce seront les Y et les Z qui prendront...

    Et sinon bahh gros merci pour l'utilisation... jvais quand meme regarder mes cours de math de l'an dernier (c'est déjà loin) pour voir comment je peut matérialiser le produit matriciel mais ca devrait aller...

    Problème résolu grace a vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Les matrices
    Par countag dans le forum C++
    Réponses: 6
    Dernier message: 12/05/2006, 20h41
  2. STL et les matrices...
    Par Rodrigue dans le forum SL & STL
    Réponses: 21
    Dernier message: 08/05/2006, 20h22
  3. Les matrices
    Par Mathieu008_67 dans le forum DirectX
    Réponses: 17
    Dernier message: 24/10/2005, 14h02
  4. Opérations sur les matrices...
    Par aokiseiichiro dans le forum C
    Réponses: 32
    Dernier message: 28/07/2005, 17h10

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