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

Moteurs 3D Discussion :

changement de repere


Sujet :

Moteurs 3D

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 79
    Points
    79
    Par défaut changement de repere
    bonjour,
    j'essaie d'effectuer un changement de repère. Je travaille sous Java3D. J'ai tenté avec des matrices des changements de repère moi même, mais je n'obtiens pas la bonne transformation.
    J'ai tenté par une méthode un peu plus bourrine, mais j'ai un soucis de compression sur un axe et ca rend assez moche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Vector3f da, db, dc;
           float x,y,z;
           Point3f temp;
           da = new Vector3f();
           db = new Vector3f();
           dc = new Vector3f();
     
           da.cross(V, W);
           db.cross(W, U);
           dc.cross(Y, V);
     
           for(int i = 0; i< tab3D.S3D.length; i++)
               for(int j = 0; j< tab3D.S3D[0].length; j++)
           {
               temp =  tab3D.S3D[i][j].p3D;
               x = (temp.x - E.x);
               y = (temp.y - E.y);
               z = (temp.z - E.z);
               temp.x = ( ( x*da.x + y*da.y + z*da.z ) / (U.x*da.x + U.y*da.y + U.z*da.z) );
               temp.y = ( ( x*db.x + y*db.y + z*db.z ) / (V.x*db.x + V.y*db.y + V.z*db.z) );
               temp.z = ( ( x*dc.x + y*dc.y + z*dc.z ) / (W.x*dc.x + W.y*dc.y + W.z*dc.z) );
     
           }
    est ce que quelqu'un saurait où ma fonction est fausse? Ou mieux, quelqu'un pourrait il m'indiquer où est ce que je peux trouver une fonction de changement de repère?

    Merci

  2. #2
    Membre confirmé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 615
    Points
    615
    Par défaut
    Que cherches-tu à faire comme transformation? A priori tu travailles avec des vecteurs à 3 coordonnées, tu veux faire des rotations?

    Dans ton code, tu ne dis pas ce que sont U, V, W, Y...


  3. #3
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 79
    Points
    79
    Par défaut
    Bonjour,
    Ce que je cherche à faire, c'est un changement de repère.
    En gros, j'ai des points définis dans le repère monde, mais je voudrais les convertir en fonction d'un nouveau referentiel.

    X,Y,Z correspondent aux vecteurs de mon premier repère.
    U,V,W correspondent aux vecteurs de mon second repère.
    (je me suis trompé en recopiant , le dernier produit vectoriel c'est U,V et non pas Y,V).

    Donc pour faire simple, je voudrai exprimer les coordonnées d'un objet dans un nouveau repère dont je connais le centre et les vecteurs unitaires.
    Merci.

  4. #4
    Invité
    Invité(e)
    Par défaut Changement de repère ou transformation
    Bonjour,
    Je n'ai pas non plus très bien compris le but.
    Le changement de repère le plus simple, et ce qu'on entend généralement par changement de repère est une translation.
    X = x + TX;
    Y = y + TY;
    Z = z + TZ;
    On peut aussi vouloir faire une homothétie, ce sera de la forme
    X = x * kX + TX;
    ou une rotation
    X = x * rX + y * rY + z * rZ + TX;
    où les termes rX, rY, rZ sont les paramètres de l'affinité, la rotation+homothétie en est un cas particulier.

    Lorsqu'on fait une transformation sur une figure, un vecteur, un triangle ou un objet plus compliqué, on transforme chaque point, et non des vecteurs.

    Si la question est "soit un repère E1 défini par les vecteurs unitaires X, Y, Z et un repère E2 défini par les vecteurs unitaires U, V, W comment transformer une figure F connue dans le repère E1, en une figure G dans le repère E2", alors il faut commencer par calculer les paramètres de la transformation, une affinité dans le cas général, et appliquer la formule à tous les points de F pour obtenir la figure G.

    Je connais bien cette transformation en 2D, il y a 6 paramètres.
    En 3D, je ne suis pas tout à fait sûr de moi, je pense qu'il y a 12 paramètres.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Points : 413
    Points
    413
    Par défaut
    Ton repere R2 est définie dans ton repère R1 par une matrice M (la matrice de passage de R2 vers R1)

    Pour passer du repère R1 au repère R2, il faut multiplier par la matrice de passage de R1 vers R2 soit l'inverse de M tout simplement.
    SPARK
    Moteur de particule C++ opensource avec modules de rendu OpenGL, Irrlicht et SFML

  6. #6
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 79
    Points
    79
    Par défaut
    je suis entièrement d'accord avec toi fifron.
    Le HIC, c'est que j'ai toujours appris que pour construire cette matrice, il faut les 3 vecteurs unitaires de R2 exprimés dans R1 et le centre de R2 exprimé dans R1.

    Soit R1 (O,X,Y,Z)
    et R2(E,U,V,W)

    avec E(Ex,Ey,Ez) Exprimés dans R1
    et U(Ux,Uy,Uz), V(Vx,Vy,Vz) et W(Wx,Wy,Wz) exprimés dans R1.

    La matrice de passage donne donc
    Ux Vx Wx Ex
    Uy Vy Wy Ey
    Uz Vz Wz Ez
    .0. .0. .0. 1

    mais sur certains exemple ça ne marche pas (en tous cas pas sur ce que j'ai pris pour faire mes tests et ils sont relativement simple).

    peut être que je me suis trompé de formule, mais je n'en trouve pas d'autre.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/04/2011, 17h53
  2. Matrice de changement de Base/repere
    Par Ange_blond dans le forum Mathématiques
    Réponses: 3
    Dernier message: 05/02/2009, 12h14
  3. 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
  4. [3D] changement de repere
    Par kacedda dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 10/05/2006, 15h24
  5. URGENT : Zoom et changement de repère
    Par poca10 dans le forum MFC
    Réponses: 5
    Dernier message: 28/05/2002, 13h32

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