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

3D Java Discussion :

Pourquoi les transformations ne sont pas cumulatives?


Sujet :

3D Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 31
    Points
    31
    Par défaut Pourquoi les transformations ne sont pas cumulatives?
    Bonjour,

    Je suis dans mes débuts avec java3d. J'ai du construire une centaines de ColorCube avec des transformations diverses et je n'arrive pas à comprendre pourquoi une rotation suivie d'une translation ne donne pas le même résultat qu'une translation suivie d'une rotation.

    Pour dire, j'ai sorti la règle et j'ai essayé de comprendre le tout sur des axes xyz réels.

    Voici mon petit test:


    en haut il s'agit d'un transformGroup suivant une translation qui enfante un transformGroup suivant une rotation. Le tg suivant la rotation enfante ensuite mon ColorCube. (les images de droites font la même chose apparemment, avec une multiplication type trans.mul(rot) ).

    en bas, le contraire!

    Je l'ai noté dans le titre de la JFrame.

    Si on regarde bien, il y a environ 1/2 centimètre de différence en taille sur mon écran 1900 pix. Ca je ne comprend pas pourquoi...


    Le problème c'est que je comprend pas relativement à quoi se font ces transformations. et dans quelle ordre elles sont prises en compte.

    Mes questions sont donc:

    - Suivant ce schéma



    Dans quel ordre vont les transfos? Du plus proche de ma Leaf au plus loin (bas en haut) ou le contraire?



    - et est ce que les axes, après une translations par exemple, se repositionnent sur le centre 0;0;0 de mon cube? Je veux dire par là, après une translation (comme dans l'exemple), est ce que le repère 3d auquel la rotation est relative passe toujours par le centre du cube?


    Aiaiai... je sais pas si je suis très clair!

    Merci en tous cas pour ceux qui m'auront compris

    A+

  2. #2
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    salut
    voici un exemple pour comprendre
    Dans le premier, on effecture d'abord la rotation (1), ce qui donne le carré dessiné en gris foncé, puis on
    effectue la translation (2), ce qui donne le carré dessiné en noir.
    Dans le second cas, on effectue la translation (1), puis la rotation (2).
    On constate que le résultat n'est pas du tout le même
    Images attachées Images attachées  

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    oui, ça effectivement j'ai bien remarqué

    merci d'ailleurs pour le source, mais il ne répond pas à toutes mes questions...

    je voudrais réussir à visualiser comment ils se comportent par rapport aux axes.

    Je comprend que si j'effectue d abord une translation puis une rotation, la rotation fera bouger mon objet par rapport aux axes passant par 0;0;0, donc l'objet bouge "autour" d'un de ces axes plutot que sur lui meme.

    Par contre, je ne comprend pas pourquoi la succession de deux rotations, par ex en X puis Z, ne donne pas la même chose selon l'ordre que je les applique?

    Est ce que le repère 3d bouge également? ça me parait louche... pour moi, il aurait été logique que pour deux rotation successive, le résultat soit *exactement* le même quelque soit l'ordre de la multiplication des transfo...

    bref... grand mystère pour le moment.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    le plus simple pour visualiser ca, c'est de prendre deux dés identique dans ta main. Tu prend deux axes perpendiculaire passant par des faces du dés, en leur centre. Sur l'un tu tourne d'un quart de tour autour de l'axe1 puis de l'axe 2, et sur le deuxième tu fais l'inverse (rotation autour de 2 puis de 1). Tu verra que t'aura pas les memes faces aux memes endroits.


    Pour la version mathématique de la chose, faut afficher les matrices de transformation combinées. Mais les opérations de rotation en calcul matriciel ne sont pas commutatives.

Discussions similaires

  1. Pourquoi les GOTO ne sont pas appréciés ?
    Par Hoffa dans le forum Débuter
    Réponses: 6
    Dernier message: 29/10/2008, 12h54
  2. Pourquoi les mails ne sont ils pas envoyés?
    Par Sunsawe dans le forum Développement
    Réponses: 3
    Dernier message: 12/04/2007, 23h49
  3. Réponses: 7
    Dernier message: 22/09/2006, 01h28
  4. Réponses: 1
    Dernier message: 04/12/2005, 18h02
  5. Les Langages ne sont pas tous les mêmes ......
    Par Max Payne dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 28/08/2003, 13h51

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