Skip to content
字数
1616 字
阅读时间
7 分钟

好的,没有问题。求旋转矩阵的核心在于明确你的“已知条件”和“旋转目标”。根据不同的任务,求解的方法也不同。

下面我为你总结几种最常见的任务以及对应的求解方法。

核心思想回顾

在开始之前,请记住最关键的一点:一个3x3的旋转矩阵 R 的三列,分别代表了原始坐标系的 x, y, z 三个基向量 (1,0,0), (0,1,0), (0,0,1) 旋转之后的新方向

    [ |    |    |  ]
R = [ x'   y'   z' ]
    [ |    |    |  ]
  • 第一列 x':是原x轴旋转后的新方向向量。
  • 第二列 y':是原y轴旋转后的新方向向量。
  • 第三列 z':是原z轴旋转后的新方向向量。

理解这一点,是求解所有旋转矩阵问题的基础。


任务一:绕某个标准坐标轴旋转一个角度

这是最基础的旋转。

  • 已知条件:旋转轴(X, Y, 或 Z轴)和旋转角度 θ
  • 求解方法:直接使用标准公式。
  1. 绕 X 轴旋转 (Rx):

        [ 1    0        0     ]
    R = [ 0  cos(θ)  -sin(θ) ]
        [ 0  sin(θ)   cos(θ) ]
  2. 绕 Y 轴旋转 (Ry):

        [ cos(θ)   0   sin(θ) ]
    R = [    0     1      0   ]
        [ -sin(θ)  0   cos(θ) ]

    (注意:这里的符号 sin(θ)-sin(θ) 与其他两个矩阵不同,这是一个常见易错点)

  3. 绕 Z 轴旋转 (Rz):

        [ cos(θ)  -sin(θ)  0 ]
    R = [ sin(θ)   cos(θ)  0 ]
        [    0        0     1 ]

任务二:进行连续的多次旋转(例如欧拉角)

真实世界的旋转通常是组合的,比如先绕Z轴旋转(偏航角 Yaw),再绕Y轴旋转(俯仰角 Pitch),最后绕X轴旋转(翻滚角 Roll)。

  • 已知条件:一系列的旋转轴和对应的角度。
  • 求解方法:将每一次旋转的矩阵依次相乘

关键点:矩阵乘法的顺序至关重要!

旋转顺序决定了乘法顺序。通常有两种约定:

  • 固定轴(Extrinsic)旋转:每次旋转都绕着世界坐标系的轴进行。矩阵从右向左写。
    • 例如:先绕世界X轴转α,再绕世界Y轴转β。最终的旋转矩阵 R = Ry(β) * Rx(α)。向量 v 会先被 Rx(α) 作用。
  • 自身轴(Intrinsic)旋转:第一次旋转绕世界轴,后续旋转都绕着物体自身已经旋转过的新坐标轴进行。矩阵从左向右写。
    • 例如:先绕自身Z轴转α,再绕新的Y轴转β。最终的旋转矩阵 R = Rz(α) * Ry(β)

最常见的航空航天顺序 Yaw-Pitch-Roll (Z-Y-X),通常指先绕Z轴,再绕新的Y轴,再绕最新的X轴,其合成矩阵为 R = Rz(yaw) * Ry(pitch) * Rx(roll)


任务三:已知旋转后的坐标系长什么样

这是最直观也最强大的方法,直接回归到旋转矩阵的定义。

  • 已知条件:旋转之后,新的坐标系的三个轴 x_new, y_new, z_new 在原始坐标系中的方向向量。

  • 求解方法:直接将这三个(单位)向量作为列向量,组成旋转矩阵。

    R = [ x_new | y_new | z_new ]

        [ x_new.x  y_new.x  z_new.x ]
    R = [ x_new.y  y_new.y  z_new.y ]
    [ x_new.z  y_new.z  z_new.z ]

    前提:这三个向量 x_new, y_new, z_new 必须是单位向量,并且两两正交(相互垂直),构成一个右手坐标系。

实际例子:“Look-At” (看向) 矩阵 假设一个物体在原点,我们希望它“看向”目标点 target,并且通常规定它的“头顶”朝向世界坐标系的上方 up (通常是 (0,1,0))。

  1. 计算新的Z轴:通常,物体的-Z轴是“朝前”的方向。所以,新的Z轴方向是从目标指向物体。 z_new = normalize(position - target) (或者 normalize(target - position) 如果+Z是朝前)
  2. 计算新的X轴:新的X轴(“右方”)必须同时垂直于“前方”和“上方”。 x_new = normalize(cross(up, z_new)) (cross 是叉乘)
  3. 计算新的Y轴:新的Y轴(“上方”)必须同时垂直于新的Z轴和新的X轴。 y_new = cross(z_new, x_new)
  4. 组合矩阵:将 x_new, y_new, z_new 作为列向量填入矩阵即可。

任务四:绕任意轴旋转一个角度

这是一个更通用的情况,不局限于标准X,Y,Z轴。

  • 已知条件:一个任意的旋转轴(单位向量)u = (ux, uy, uz) 和旋转角度 θ
  • 求解方法:使用 罗德里格旋转公式 (Rodrigues' Rotation Formula)

虽然公式看起来复杂,但计算机实现起来很直接: R = I + sin(θ)K + (1 - cos(θ))K²

其中:

  • I 是3x3的单位矩阵。
  • K 是由旋转轴 u 构成的反对称矩阵:
        [  0   -uz   uy  ]
    K = [  uz   0   -ux  ]
        [ -uy   ux   0   ]
  • 是矩阵 K 的平方。

总结表格

任务场景已知条件求解方法
1. 绕标准轴旋转旋转轴 (X, Y, Z) 和角度 θ直接套用 Rx, Ry, Rz 的标准公式。
2. 组合旋转 (欧拉角)一系列的旋转轴和角度将每个旋转的标准矩阵按正确顺序相乘。注意顺序!
3. 已知最终姿态旋转后新坐标系的三个基向量 x', y', z'x', y', z' 作为列向量直接拼成矩阵 `R = [x'
4. 绕任意轴旋转任意旋转轴向量 u 和角度 θ使用 罗德里格旋转公式

根据你的具体任务,选择对应的方法,就可以高效地求出所需的旋转矩阵。对于初学者,方法三 是最能帮你理解旋转矩阵本质的方法。

贡献者

页面历史