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 de changement de Base/repere


Sujet :

Mathématiques

  1. #1
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut Matrice de changement de Base/repere
    Bonjour,

    Je reviens sur un probleme assez connu, mais je ne m'en sort pas malgré tout et j'ai besoin d'avis plus élairés sur la question...

    J'ai un objet 3D qui a son propre repere (il a une normale, un vecteur side, un vecteur up... ) un peu comme une camera en 3D quoi.

    Je dois appliquer cet objet à un endroit précis (désigné par une normale et une position) et donc je galere sur le calcul de la transformation à lui appliquer.

    Le changement de position est enfantin, mais le calcul de la rotation à appliquer me pose des problemes :
    Si je calcule la rotation pour faire coïncider les normales (celle de l'objet et celle que je dois avoir apres transformation) alors j'ai bien la correspondance des normales. Par contre, mon objet 3D, meme en ayant la normale dans la bonne direction, peut encore avoir une rotation autour de la normale qui est aléatoire.

    C'est un phenomene attendu si on le regarde de plus pres. la rotation calculé est une simple rotation qui en prend en compte qu'un objectif.
    Cependant, j'ai aussi besoin que mon axe principal de mon objet soit dans le plan YZ (pour que quelque soit la normale, l'objet soit toujours dans le meme plan)

    Or, si je calcule et applique la 2eme transformation, la 1ere se trouve affectée et au final mon objet n'a pas vraiment la bonne orientation.

    Je cherche donc un moyen de calculer la matrice/quaternion de rotation d'un repere A vers le repere B. je connais l'expression des 3 vecteurs dans les deux reperes.

    J'ai donc fait une matrice colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    osg::Matrix rotation_matrix(
                                         X[0],	Y[0],	Z[0],	0.0f,
                                         X[1],	Y[1],	Z[1],	0.0f,
                                         X[2],	Y[2],	Z[2],	0.0f,
    			              0.0f,	0.0f,	0.0f,	1.0f);
    avec X Y et Z étant mes nouveaux vecteurs dans le repere B... mais encore une fois c'est comme si une seule des rotation était prise en compte...

    Vous feriez comment vous ? vous voyez des erreur dans le raisonnement ?

    Merci.
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  2. #2
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    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 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Salut,

    Citation Envoyé par Ange_blond Voir le message
    Vous feriez comment vous ?
    A vue de nez en sortant du boulot, je ferais pareil... sauf que peut-être que je construirais la matrice avec les coordonnées des vecteurs B exprimées dans le repère A... je ne sais jamais de tête dans quel sens il faut le prendre...

    Tu as bien pensé à normaliser tes vecteurs?

    Sinon pour la vérif, c'est simple... tu prends tes vecteurs directeurs du repère A, tu les passes par la matrice, et tu vois si tu retrouves ceux du repère B.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    Bonne idée de vérifier les vecteur à l'arrivée oui.

    Pour le moment j'ai réussi à avoir la transformation que je souhaitais, à un détail pres.
    Lorsque le vecteur X se décompose sur YZ : X(0,y,z) alors tout roule tres bien, mais si X(x,y,z), plus x grandit et plus j'ai un résultat bizzare.

    Curieusement, lorsque z ~0.99 et x > 1E-3 environ, j'ai un comportement bizzare... je planche encore là dessus, mais comme j'ai une TODO list longue comme le bras encore, pour le moment je vais me contenter de ce comportement en attendant d'avoir une idée neuve sur la question ou le temps de m'y remettre...

    Bien sur je reste ouvert à toutes les idées et propositions

    Merci.
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  4. #4
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Points : 422
    Points
    422
    Par défaut
    salut

    je considère uniquement les matrices 3x3 (en mettant la position à part)

    tu as la matrice de ton objet M
    tu désires qu'il soit positionné à telle position, avec telle orientation : ça te fais une matrice M2

    donc pour passer de M à M2 il faut multiplier par M2.M{-1}
    M{-1} c'est l'inverse de M qui se calcule facilement si M est orthonormée

Discussions similaires

  1. Matrice de changement de Base/repere
    Par Ange_blond dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 04/02/2009, 11h28
  2. Réponses: 2
    Dernier message: 29/11/2006, 18h52
  3. changement de base de donnée
    Par Pitou5464 dans le forum Access
    Réponses: 3
    Dernier message: 08/08/2006, 14h37
  4. Changement de base...enfin je crois....
    Par Eric Boisvert dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 28/09/2005, 21h11
  5. [VB6] changement de base....
    Par white angel dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/04/2004, 17h19

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