Il existe deux systèmes de coordonnées. On connaît les coordonnées 3D de l'Origine et les vecteurs 3D des axes du second système de coordonnées par rapport au premier système de coordonnées. Alors comment trouver la matrice de rotation qui transforme le premier système de coordonnées en deuxième système de coordonnées?
Le problème décrit peut être résolu comme suit. Laisser
M = m_11 m_12 m_13
m_21 m_22 m_23
m_31 m_32 m_33
désigne la matrice de rotation souhaitée. Nous exigeons
1 0 0 * M + t = x_x x_y x_z
0 1 0 y_x y_y y_z
0 0 1 z_x z_y z_y
où t
désigne la traduction; nous voyons que cette égalité matricielle peut être résolue en multipliant à partir de la gauche la matrice identitaire, qui est l'inverse d'elle-même; on obtient donc l'égalité suivante.
M + t = x_x x_y x_z
y_x y_y y_z
z_x z_y z_y
Cela peut être réorganisé en soustrayant t
des deux côtés pour obtenir la matrice souhaitée M
comme suit.
M = x_x x_y x_z - t = x_x-t_x x_y-t_y x_z-t_z
y_x y_y y_z y_x-t_x y_y-t_y y_z-t_z
z_x z_y z_y z_x-t_x z_y-t_y z_z-t_z
Notez que cela a été relativement facile car la matrice initiale est constituée des vecteurs de base de la base standard. En général, il est plus difficile et implique une transformation de base , ce qui peut être fait essentiellement par élimination gaussienne , mais peut être numériquement difficile.
J'ai écrit un article à ce sujet qui montre comment le faire, avec du code source. La réponse courte est que vous construisez une matrice 3x3 avec les produits scalaires des différents axes
http://www.meshola.com/Articles/converting-between-coordinate-systems
Je pense que le changement de base pourrait vous aider Wiki Link . Son assez facile à mettre en œuvre.
Soit A la matrice 4x4 définissant la relation entre les deux systèmes de coordonnées.
Alors l'angle entre les deux est:
θ = arcos (trace (A) /2,0)