2017-06-23 5 views
0

J'ont cette boîte définie, qui a une taille de (1, 2, 3) qui fait pivoter le long des trois axes à 45 °:Pourquoi la rotation selon trois axes est différente de la rotation de chaque axe séparément?

Transform { 
    rotation 1 1 1 0.7854 
    children [ 
    Shape { 
     appearance Appearance { material Material {} } 
     geometry Box { size 1 2 3 } 
    } 
    ] 
} 

Mais quand j'applique la même rotation le long de chaque axe séparément Je reçois un autre résultat:

Transform { 
    rotation 0 0 1 0.7854 
    children [ 
    Transform { 
     rotation 0 1 0 0.7854 
     children [ 
     Transform { 
      rotation 1 0 0 0.7854 
      children [ 
      Shape { 
       appearance Appearance { material Material {} } 
       geometry Box { size 1 2 3 } 
      } 
      ] 
     } 
     ] 
    } 
    ] 
} 

Wikipédia me dit que je peux multiplier toutes les matrices de rotation comme ceci: R = R (x) R (y) R (z)?

Ceci est le résultat du code ci-dessus:

Result

Répondre

1

La première rotation que vous décrivez n'est pas une rotation autour de trois axes, mais une rotation autour de l'axe (1,1,1) qui est différent. Il est alors normal que vous n'obteniez pas le résultat attendu. Si vous souhaitez vous pouvez calculer la matrice de rotation pour l'axe (1,1,1) et l'angle 45 de la formule de Wikipedia et le comparer à la multiplication de la matrice de rotation pour chaque axe x, y, z et angle 45 et vous verrez que vous obtenez différentes matrices.

+0

Merci. Quelle formule voulez-vous dire? J'ai recherché cette matrice de formule/transformation mais je n'ai pas trouvé la matrice appropriée. Si j'utilise la multiplication R (z) R (y) R (z) est obtenir le résultat appliqué à trois rotations pas la rotation que je cherche (1, 1, 1) <--- celui-ci je voudrais avoir. –

+1

Recherchez "Matrice de rotation à partir de l'axe et de l'angle" ici https://en.m.wikipedia.org/wiki/Rotation_matrix. La formule suppose que l'axe est un vecteur unitaire, vous devrez donc le normaliser. J'espère que cela t'aides. – user19318

+0

C'est exactement ça! Merci beaucoup!!! –