和角公式证明

· · 算法·理论

从上一篇文章 https://www.luogu.com.cn/article/a0rd1bxx 的线性代数大学习中,我们知道旋转可以视为乘以一个矩阵。

那么,记 R_\theta 是旋转 \theta 对应的矩阵。

设旋转 \alpha 的变换 f_\alpha (P) = R_\alpha P,以及相应的旋转 \beta 角的变换 f_\beta (P) = R_\beta P

显然有旋转 \alpha + \beta 角等于先转 \alpha 再转 \beta,也就是说 f_{\alpha+\beta}(P) = f_\alpha(f_\beta(P)) 恒成立。那么,代入函数的定义:

R_{\alpha+\beta}P = R_\alpha (R_\beta P)

用结合律,就有

R_{\alpha+\beta}P = (R_\alpha R_\beta) P

既然对任意向量两个矩阵的变换结果相同,那么它们肯定是相同的。有

R_{\alpha+\beta} = R_\alpha R_\beta

这样,由于我们知道 R_{\alpha+\beta} 中包含 \sin (\alpha+\beta)\cos (\alpha+\beta) 项,我们就可以用矩阵乘法算出来 R_{\alpha+\beta},然后从中取出相应的项。

计算过程如下:

R_{\alpha+\beta} = R_\alpha R_\beta = \begin{pmatrix} \cos\alpha & -\sin\alpha \\ \sin\alpha & \cos\alpha \end{pmatrix} \begin{pmatrix} \cos\beta & -\sin\beta \\ \sin\beta & \cos\beta \end{pmatrix}

根据矩阵乘法法则(第一行乘以第一列,第一行乘以第二列……):

R_\alpha R_\beta = \begin{pmatrix} \cos\alpha\cos\beta - \sin\alpha\sin\beta & -\cos\alpha\sin\beta - \sin\alpha\cos\beta \\ \sin\alpha\cos\beta + \cos\alpha\sin\beta & -\sin\alpha\sin\beta + \cos\alpha\cos\beta \end{pmatrix}

整理一下:

R_\alpha R_\beta = \begin{pmatrix} \cos\alpha\cos\beta - \sin\alpha\sin\beta & -(\sin\alpha\cos\beta + \cos\alpha\sin\beta) \\ \sin\alpha\cos\beta + \cos\alpha\sin\beta & \cos\alpha\cos\beta - \sin\alpha\sin\beta \end{pmatrix}

因为 R_{\alpha+\beta} = R_\alpha R_\beta,所以两个矩阵的对应元素必须相等。我们来比较一下左上角和左下角的元素:

发现了吗?这样得到的结果与和角公式是相同的,于是我们就证明了和角公式。

笑点解析:本文使用了循环论证的手法。

当然,本文也可以不仅仅是循环论证。我们考虑用比和角公式更基本的方法找出旋转矩阵,这样我们的证明就是成立的了。

这是最纯粹的几何方法。我们不预设任何三角函数知识,而是从旋转这个变换本身的性质出发。

  1. 定义旋转:我们定义一个逆时针旋转 \theta 角的变换 R_\theta 是一个线性变换,它必须满足以下几个几何性质:

    • 保长度:旋转一个向量,其长度不变。||R_\theta \mathbf{v}|| = ||\mathbf{v}||.
    • 保定向:旋转不会把平面“翻转”过来(比如变成镜像)。在线性代数里,这意味着变换矩阵的行列式为 +1。
    • 变换基向量:我们来看看它如何作用于基向量 \mathbf{i} = (1, 0)\mathbf{j} = (0, 1)
      • \mathbf{i}=(1,0) 旋转 \theta 角,根据单位圆的定义,得到的新向量就是 (\cos\theta, \sin\theta)注意:这里的 \cos\theta\sin\theta 仅仅是单位圆上一个点的坐标的记号,我们暂时不知道它们的任何性质(比如和角公式)。
      • \mathbf{j}=(0,1) 旋转 \theta 角,得到的新向量是 (-\sin\theta, \cos\theta)
  2. 构造矩阵:线性变换的矩阵,其第一列就是变换后的 \mathbf{i},第二列就是变换后的 \mathbf{j}。所以,我们直接得到了旋转矩阵:

    R_\theta = \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix}

    这个矩阵的推导过程完全没有使用和角公式。它仅仅是基于“旋转”这个变换作用在基向量上的几何结果。

这说明了,旋转的几何性质和代数性质是相同的。我们可以选择几何方法或者代数方法定义它,然后推导出它的全部性质,不会有什么差别。

然而,你可以发现,我们的文章仍然存在诸多漏洞。

我们假设了旋转是一种线性变换。这是一个先验知识,其实问题不大,毕竟我们总是需要一些公理。

然而,在使用了这个先验知识之后,我们又诉诸了几何直觉:两个基向量旋转的结果,与“单位圆上与原点连线和 x 轴成一定夹角的点的坐标”有关,这本质上已经诉诸了几何直觉,这就要求我们证明几何直觉和“线性变换”之间是自洽的。

更严重的是,我们假设“旋转 a+b,等价于旋转 a 再旋转 b”,对于一般的线性变换,这是不成立的(“旋转 a+b”对于一般的线性变换根本不知道你在说什么)。而这一条里面很可能已经蕴含了和角公式。

能不能救呢?可以的。

疑虑一:几何直觉与“线性变换”公理的自洽性

线性变换的定义是:T(a\mathbf{u} + b\mathbf{v}) = aT(\mathbf{u}) + bT(\mathbf{v})。 我们可以把它拆成两步来验证我们对“旋转”的几何直觉:

  1. T(\mathbf{u} + \mathbf{v}) = T(\mathbf{u}) + T(\mathbf{v})(可加性)
    • 几何直觉:向量加法 \mathbf{u} + \mathbf{v} 遵循平行四边形法则。\mathbf{u}\mathbf{v} 是平行四边形的两条边,\mathbf{u} + \mathbf{v} 是对角线。
    • 旋转操作:旋转是一种刚体变换。它会移动和旋转图形,但不会改变图形的形状和大小。
    • 自洽性证明:当我们旋转整个平行四边形时,它仍然是一个平行四边形。原来的边 \mathbf{u}\mathbf{v} 变成了旋转后的 R(\mathbf{u})R(\mathbf{v})。原来的对角线 \mathbf{u}+\mathbf{v} 变成了旋转后的 R(\mathbf{u}+\mathbf{v})。由于旋转后的图形依然是平行四边形,所以它的对角线必然等于两条边的和,即 R(\mathbf{u}+\mathbf{v}) = R(\mathbf{u}) + R(\mathbf{v})
    • 结论:可加性成立。

这本质上是三角形全等。

  1. T(c\mathbf{u}) = cT(\mathbf{u})(齐次性)
    • 几何直觉:向量 c\mathbf{u} 是将向量 \mathbf{u} 的长度缩放 c 倍(方向可能相反)。
    • 旋转操作:旋转保持长度不变。
    • 自洽性证明:旋转 c\mathbf{u} 时,它的方向会改变,但长度仍然是 \mathbf{u}c 倍。这与先旋转 \mathbf{u} 得到 R(\mathbf{u}),再将其长度缩放 c 倍得到的结果 cR(\mathbf{u}) 是完全一样的。
    • 结论:齐次性成立。

这和相似则是类似的。

通过这个论证,我们证明了我们脑海中那个直观的、刚性的“旋转”概念,内生地满足线性变换的代数定义。所以,将“旋转是线性变换”作为起点是合理且自洽的。

疑虑二:“旋转 \alpha+\beta = 先转 \alpha 再转 \beta” 这一条里面很可能已经蕴含了和角公式

这是更致命、也更深刻的一个问题。

这个性质 R_{\alpha+\beta} = R_\alpha R_\beta 实际上是在描述旋转变换构成了一个阿贝尔群(交换群),并且这个群的结构与实数的加法群是同构的。这确实是一个非常强的性质。

那么,这个性质本身是否依赖于和角公式呢?

答案是:不依赖,如果我们小心地定义我们的术语。

这里的关键在于我们如何定义“角度”和“角度的加法”。

  1. 操作主义定义:让我们把旋转操作本身视为最基本的东西。
    • 有一个操作叫“旋转”,它由一个参数(我们称之为“角度”)来标识,记作 R_\theta
    • 我们观察到,连续进行两次旋转操作 R_\betaR_\alpha(即复合函数 R_\alpha \circ R_\beta),其结果也是一个旋转操作
    • 我们定义“角度的加法”为:如果 R_\alpha \circ R_\beta 的结果是 R_\gamma,那么我们就定义 \gamma = \alpha + \beta

看到这里的精妙之处了吗?我们不是先有了角度的加法,然后去证明旋转复合满足这个关系。我们是反过来,用旋转的复合操作来定义角度应该如何相加。

在这种视角下,等式 R_{\alpha+\beta} = R_\alpha R_\beta(这里矩阵乘法代表函数复合)就不是一个需要证明的定理,而是一个定义式,它定义了下标“+”的含义。

所以,我们的证明可以被拯救,并变得更加严谨:

严谨化后的证明逻辑链

  1. 公理1(几何):我们接受一个几何实体叫“旋转”,它是一种刚体运动,保持原点不动。
  2. 定理1(线性):从公理1,我们证明了旋转是一种线性变换(如上文所述)。
  3. 推论1(矩阵):因为旋转是线性变换,所以它可以表示为一个矩阵。通过考察基向量的变换,我们得到 R_\theta = \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix}。在这里,\cos\theta\sin\theta 仅仅是单位圆上点的坐标的记号,我们对它们的函数性质一无所知。
  4. 公理2(群结构):旋转的集合在函数复合下构成一个群。任意两个旋转的复合仍然是一个旋转。
  5. 定义1(角度加法):我们定义角度的加法 \alpha+\beta 是这样一个角度 \gamma,它使得 R_\gamma = R_\alpha \circ R_\beta。因此,关系式 R_{\alpha+\beta} = R_\alpha R_\beta 成为我们体系内的真理(根据定义)。
  6. 最终推导:现在,我们将来自推论1的矩阵形式代入到来自定义1的关系式中: \begin{pmatrix} \cos(\alpha+\beta) & \dots \\ \sin(\alpha+\beta) & \dots \end{pmatrix} = \begin{pmatrix} \cos\alpha & \dots \\ \sin\alpha & \dots \end{pmatrix} \begin{pmatrix} \cos\beta & \dots \\ \sin\beta & \dots \end{pmatrix}
  7. 结论:通过计算右侧的矩阵乘积,我们就发现\cos(\alpha+\beta)\sin(\alpha+\beta) 必须满足的代数恒等式。这些恒等式就是我们所说的“和角公式”。

致谢 && 声明:感谢 Gemini 对本文做出的贡献。Gemini 提供了避免循环论证的思路。