Math 如何找到两个坐标系之间的旋转矩阵?

Math 如何找到两个坐标系之间的旋转矩阵?,math,matrix,geometry,computer-vision,Math,Matrix,Geometry,Computer Vision,有两个坐标系。我们知道原点的三维坐标和第二坐标系相对于第一坐标系的轴的三维矢量。那么,我们如何找到将第一个坐标系转换为第二个坐标系的旋转矩阵呢 所述问题可按如下方式解决。让 M = m_11 m_12 m_13 m_21 m_22 m_23 m_31 m_32 m_33 表示所需的旋转矩阵。我们需要 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 其中

有两个坐标系。我们知道原点的三维坐标和第二坐标系相对于第一坐标系的轴的三维矢量。那么,我们如何找到将第一个坐标系转换为第二个坐标系的旋转矩阵呢


所述问题可按如下方式解决。让

M = m_11 m_12 m_13
    m_21 m_22 m_23
    m_31 m_32 m_33
表示所需的旋转矩阵。我们需要

 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
表示翻译;我们看到,这个矩阵等式可以通过从左边乘以单位矩阵来求解,单位矩阵是它自身的逆矩阵;因此,我们得到以下等式

 M + t = x_x x_y x_z
         y_x y_y y_z
         z_x z_y z_y
这可以通过从两侧减去
t
来重新排列,以获得所需矩阵
M
,如下所示

 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

注意,这是相对容易的,因为初始矩阵由标准基的基本向量组成。一般来说,它比较困难,并且涉及到一个基本上可以由完成的任务,但在数值上可能比较困难

我认为基础的改变可以帮助你。它很容易实现

我写了一篇关于它的文章,用源代码演示了如何做到这一点。简单的回答是,用不同轴的点积构建一个3x3矩阵


假设A是定义两个坐标系之间关系的4x4矩阵

那么两者之间的角度是:


θ=arcos(迹线(A)/2.0)

注意,对于旋转矩阵,应该从M的所有列中减去平移向量,所以'R=x_x-x x_y-x x_z-x…',所以我不熟悉使用的符号;
t
是否表示涉及的翻译?这是有道理的,但是最初的问题只要求旋转。我认为是的,作者的[R|t]意味着旋转+平移(注意非零原点)。对于纯旋转情况,矩阵M是正确的,对于R+t,必须使用相对坐标是,[R | t]表示旋转和平移。我们是否需要从矩阵M中减去平移向量(t)。我认为三个轴的3D向量和原点之间没有关系。(x_x,x_y,x_z)是仅表示相对于坐标系1的x轴方向的三维向量。即使没有平移,该向量也将是相同的。@Udaya平移必须单独处理,因为平移不能用矩阵乘法表示(至少在相同维度内为nt)。出于这个原因,通常使用(其中人为引入额外维度,随后通过投影移除)作为结果,所有需要的变换(旋转、缩放和平移)都可以表示为矩阵乘法。死链接,2021年4月22日。