web-dev-qa-db-fra.com

Comment trouver la matrice de rotation entre deux systèmes de coordonnées?

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?

enter image description here

19
Udaya

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

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.

8
Codor

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

1
John Mott

Je pense que le changement de base pourrait vous aider Wiki Link . Son assez facile à mettre en œuvre.

1
JavaNullPointer

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)

0
user10519046