How to find the rotation matrix between two coordinate systems?

后端 未结 4 374
Happy的楠姐
Happy的楠姐 2021-01-30 17:52

There are two coordinate systems. We know the 3D coordinates of the origin and the 3D vectors of the axes of the second coordinate system with respect to the first coordinates s

相关标签:
4条回答
  • 2021-01-30 18:16

    Let A be the 4x4 matrix defining the relationship between the two coordinate systems.

    Then the angle between the two is:

    θ = arcos(trace(A)/2.0)

    0 讨论(0)
  • 2021-01-30 18:17

    I've written an article about it that demonstrates how to do it, with source code. The short answer is that you build a 3x3 matrix with the dot products of the different axis

    http://www.meshola.com/Articles/converting-between-coordinate-systems

    0 讨论(0)
  • I think the change of basis could help youWiki Link. Its quite easy to implement.

    0 讨论(0)
  • 2021-01-30 18:31

    The problem described can be solved as follows. Let

    M = m_11 m_12 m_13
        m_21 m_22 m_23
        m_31 m_32 m_33
    

    denote the desired rotation matrix. We require

     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
    

    where t denotes the translation; we see that this matrix equality can be solved by multiplying from the left with the identity matrix, which is the inverse of itself; hence we obtain the following equality.

     M + t = x_x x_y x_z
             y_x y_y y_z
             z_x z_y z_y
    

    This can be rearranged by subtracting t from both sides to obtain the desired matrix M as follows.

     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
    

    Note that this was relatively easy as the initial matrix consists out of the basic vectors of the standard base. In general it is more difficult and involves a basis transformation, which basically can be done by Gaussian elimination, but can be numerically difficult.

    0 讨论(0)
提交回复
热议问题