Oui, vous pouvez le faire sans avoir besoin de penser en termes d'angles du tout. Puisque vous avez un cube, supposons que vous choisissiez un coin et que vous définissiez les 3 arêtes qui en émanent comme vecteurs f0, f1, f2 (ce sont des vecteurs de direction, par rapport au coin que vous avez choisi). Normaliser ceux-ci et les écrire sous forme de colonnes dans une matrice F
(f0x f1x f2x)
(f0y f1y f2y)
(f0z f1z f2z)
maintenant faire la même chose pour les vecteurs t0, t1, t2 du cube que vous voulez tourner à l'appeler et matrix T.
maintenant la matrice R = T * Inverse (F) est la matrice qui tourne de l'orientation du premier cube vers l'orientation de la seconde (car l'inverse F cartographie par exemple f0 à (1 0 0) ', puis les cartes T (1 0 0) 'à t0). Si vous voulez savoir pourquoi cela fonctionne, pensez en termes de vecteurs de base du système de coordonnées: si vous voulez faire tourner les axes XY et Z vers un nouveau système de coordonnées, les colonnes de la matrice de rotation ne sont que les vecteurs want (1 0 0) ', (0 1 0)' & (0 0 1) 'à mapper. T * Inverse (F) fait effectivement tourner votre cube de son orientation d'origine à l'axe aligné, puis à l'orientation désirée.
(Désolé pour les vecteurs de colonnes et les transformations à gauche, style OpenGL Je crois me souvenir que Direct3D est un vecteur de ligne et qu'il se transforme sur la droite, mais il devrait être évident de le changer).
Cela s'applique aussi bien aux matrices 4x4 avec un composant de traduction.
En fait ce n'est pas un cube non plus. Une section en acier. Mais cela devrait aider. Merci. –
OK. Le point est que vous devez définir un système de coordonnées local ... si vous avez juste des lignes, la rotation est ambiguë. – timday
Merci, Tim. Je n'ai pas compris pourquoi cela ne devrait pas fonctionner pour les lignes. –