3、二维旋转矩阵:旋转的数学之美

各位同学,今天我们来聊聊二维旋转矩阵。说实话,这个知识点我当年学的时候觉得特别抽象,直到后来做机器人运动学才真正体会到它的妙处。

你想想看,一个点绕着原点转,到底该怎么用数学描述?

3.1 从几何直觉到数学公式

假设平面上有一个点 P,坐标为 (x, y)。它绕原点逆时针旋转 θ 角度后,到了新位置 P' (x', y')。

我习惯用极坐标来理解这个问题。点 P 到原点的距离是 r,与 x 轴夹角为 α。那么:

x = r·cos(α)
y = r·sin(α)

旋转 θ 后,新角度变成了 α + θ:

x' = r·cos(α + θ)
y' = r·sin(α + θ)

嗯,这里要用到三角恒等式了。我个人觉得这是整个推导中最关键的一步:

x' = r·cos(α)·cos(θ) - r·sin(α)·sin(θ)
   = x·cos(θ) - y·sin(θ)

y' = r·sin(α)·cos(θ) + r·cos(α)·sin(θ)
   = x·sin(θ) + y·cos(θ)

看,这就是二维旋转的核心公式!

3.2 旋转矩阵的诞生

把上面两个式子写成矩阵形式,就得到了旋转矩阵:

[x']   [cos(θ)  -sin(θ)] [x]
[y'] = [sin(θ)   cos(θ)] [y]

这个 2×2 矩阵 R(θ) 就是二维旋转矩阵。它把原始坐标映射到旋转后的坐标。

几何意义解读:

  • 第一列 [cos(θ), sin(θ)]ᵀ 是 x 轴单位向量旋转后的位置
  • 第二列 [-sin(θ), cos(θ)]ᵀ 是 y 轴单位向量旋转后的位置
  • 说白了,旋转矩阵的每一列就是原坐标轴旋转后的新坐标

3.3 我在项目中踩过的坑

我曾经在做一个机械臂视觉抓取项目时,发现抓取点总是偏的。查了半天,原来是旋转方向搞反了。

这里给大家提个醒:

  • 逆时针旋转:θ 为正,用上面的矩阵
  • 顺时针旋转:θ 为负,或者用转置矩阵 R(-θ) = R(θ)ᵀ

避坑指南:

我曾经在代码里把 sin(θ) 的符号写反了,结果整个机械臂的轨迹都乱套了。建议你在写代码时,先用一个已知点(比如 (1,0))验证一下旋转是否正确。

3.4 旋转矩阵的重要性质

旋转矩阵有几个性质,我建议你牢牢记住:

性质 表达式 说明
正交性 R(θ)ᵀ·R(θ) = I 转置等于逆矩阵
行列式 det(R(θ)) = 1 旋转不改变面积
可组合性 R(θ₁)·R(θ₂) = R(θ₁+θ₂) 多次旋转可合并

小技巧:

正交性意味着旋转矩阵的逆就是它的转置。这在做坐标变换时特别有用——想反向旋转,直接转置矩阵就行,不用重新算三角函数。

3.5 代码实现示例

这是我常用的 Python 实现,简洁明了:

import numpy as np

def rotation_matrix_2d(theta):
    """
    生成二维旋转矩阵
    theta: 旋转角度(弧度)
    """
    c = np.cos(theta)
    s = np.sin(theta)
    return np.array([[c, -s],
                     [s,  c]])

# 验证:旋转点 (1, 0) 逆时针 90 度
theta = np.pi / 2
R = rotation_matrix_2d(theta)
p = np.array([1, 0])
p_rotated = R @ p
print(f"旋转后坐标: {p_rotated}")  # 输出 [0, 1]

3.6 知识体系总览

下面这张图帮你理清二维旋转矩阵的知识脉络:

二维旋转矩阵 极坐标推导 三角恒等式展开 矩阵表示 几何意义解读 重要性质 正交·行列式·组合 机器人运动学 计算机图形学 视觉定位 核心:用矩阵优雅描述旋转运动

二维旋转矩阵看似简单,但它是理解三维旋转、四元数等高级概念的基础。我建议你亲手推导一遍,再用代码验证几个角度,这样印象会深刻得多。

记住,旋转矩阵的本质就是坐标轴的重新定向。搞懂了这个,后面的欧拉角、旋转向量都不在话下。

可可精品资料库