本人初学增强现实课程,其中涉及到了矩阵变换的知识点。书中使用三维正交矩阵表示物体的旋转,不过没有给出相关的证明。本人查阅了相关资料,整理了一下各家思路,照着自己的理解写了一下旋转矩阵为正交矩阵的证明以及相关性质的证明。如有错误,欢迎交流指正~

另外,本文是以一种零基础小白的角度来写,对一些内容会进行非常详细的解释,对一些大佬来说可能会有些冗余,在此先提前告知~


目录

  • 证明旋转矩阵为正交矩阵
  • 一些前置知识点
  • 证明
  • 证明旋转矩阵的特征根只能为正负一
  • 代数证明
  • 几何分析
  • 总结


证明旋转矩阵为正交矩阵

设最开始空间的坐标系为笛卡尔坐标系,用 正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python表示空间A的任一矩阵, 正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_02为经过旋转后到达空间B的矩阵。因为旋转过程进行的是线性变换,所以可以用矩阵正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_03表示旋转过程。列出公式即为:
正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_04
我们需要证明的即:正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python_05


对上面一段话的几点解释:

     1. 笛卡尔坐标系:就是直角坐标系和斜坐标系的统称。在这里就理解成我们平时用的空间直角坐标系就可以

     2. 空间中的矩阵:也就是空间中的向量,也可以理解成空间中任意一点的坐标。将其分解成x,y,z三个方向上的分量,就组成一个3x3的矩阵

     3. 为什么旋转过程是线性变换?

     线性变换可以看作是坐标系“保持网格线平行并等距分布”的变换。旋转过程可以看作空间A整个坐标系绕着原点旋转一定角度到达空间B,其坐标之间的距离以及直线间的平行关系是没有发生变化的。更详细的解释可以参考链接视频:【官方双语/合集】线性代数的本质 - 系列合集 03:矩阵与线性变换


一些前置知识点

1.在三维坐标系中,一旦单位矩阵的旋转矩阵确定了,其他任一矩阵的旋转矩阵也就确定了

本句话证明如下:

设空间A的一个向量
正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_06
正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_07正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_08正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性变换_09 分别为x、y、z轴上的单位向量,则 正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python 向量可表示为:
正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_11


正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python_12

正交旋转因子载荷矩阵Python 旋转因子的正交性证明_旋转矩阵_13为空间A的单位矩阵,正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性变换_14为空间B的单位矩阵,则

正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_15

将(2)式代入(1)式得
正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_16

即可得到B空间下该向量对应的坐标,故得证:一旦单位矩阵的旋转矩阵确定了,其他任一矩阵的旋转矩阵也就确定了。

那我们可以令正交旋转因子载荷矩阵Python 旋转因子的正交性证明_旋转矩阵_17为单位矩阵,这样求出来的正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_18对空间A的任一矩阵同样适用


2. 如何证明一个矩阵为正交矩阵

正交矩阵定义(来自百度百科):

正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性变换_19


我们知道 正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_20 是一个满秩矩阵,所以存在其逆矩阵正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python_21,且有正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性变换_22

故我们只需要证明
正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性变换_23
即可证明正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_20

又因为正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_20 表示的是从空间A到空间B的旋转变换,所以可知正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python_21表示的就是其逆过程,即从空间B到空间A的旋转还原,这一点在下面的证明中比较重要。

解释一下为什么R是个满秩矩阵:

如果R不是满秩矩阵,那么存在一行或一列全为0向量,那么它就不能表示所有三个轴的向量分量;这种变换会将一个三维的矩阵变换成了二维,也就是我们说的退化。与正常旋转产生的效果不一致。所以R一定是个满秩矩阵


证明

正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_27正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性变换_28正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_29正交旋转因子载荷矩阵Python 旋转因子的正交性证明_旋转矩阵_30

因为

正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性变换_31

正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_32

所以
正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python_33
所以正交旋转因子载荷矩阵Python 旋转因子的正交性证明_旋转矩阵_34

这里可以这么理解:正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性变换_35取的是R的第一行向量,与正交旋转因子载荷矩阵Python 旋转因子的正交性证明_旋转矩阵_36相等,所以R的第一行向量即为正交旋转因子载荷矩阵Python 旋转因子的正交性证明_旋转矩阵_36,其他的以此类推。

正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_38正交旋转因子载荷矩阵Python 旋转因子的正交性证明_旋转矩阵_39正交旋转因子载荷矩阵Python 旋转因子的正交性证明_旋转矩阵_40

正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_41

我们要找到正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python_21的表达式,就需要想办法将B空间的向量与A空间联系起来。

这里用到一个知识点,就是点乘(dot product)的几何意义:如下图,我们从点乘的公式(α•β=|α||β|cos<α,β>)可以得到α•β相当于β的模乘上α在β上投影的模,所以当|β|=1时,α•β就是指α在β上投影的模。这一点在下面的内容中非常重要。

正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python_43


因为正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_44为单位向量,所以正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_45,表示为正交旋转因子载荷矩阵Python 旋转因子的正交性证明_旋转矩阵_36正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_44上投影的模。所以矩阵R可以表示为:

正交旋转因子载荷矩阵Python 旋转因子的正交性证明_旋转矩阵_48

分析这个矩阵可以看出,矩阵第一行即为向量正交旋转因子载荷矩阵Python 旋转因子的正交性证明_旋转矩阵_36分别在正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_44正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_51正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性变换_52上投影的模的长度,正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python_53正交旋转因子载荷矩阵Python 旋转因子的正交性证明_旋转矩阵_54以此类推。

而对于逆矩阵正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python_21来说,从空间B变换回空间A应该也遵循同样的规律,即矩阵正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python_21的第一行应该为向量正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_44正交旋转因子载荷矩阵Python 旋转因子的正交性证明_旋转矩阵_36正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python_53正交旋转因子载荷矩阵Python 旋转因子的正交性证明_旋转矩阵_54的点乘,正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_51正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性变换_52以此类推,即

正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_63

又因为

正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python_64

点乘满足交换律,所以实际上
正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_65

由上文知,由此得证旋转矩阵R即为正交矩阵。



证明旋转矩阵的特征根只能为正负一

由上面我们证明了旋转矩阵为正交矩阵,那么对于正交矩阵的所有性质,旋转矩阵都会满足。这里着重分析一下“特征根只能为正负一”这个性质,这个性质当然也是正交矩阵的性质。

代数证明

设正交矩阵为正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_66,特征根为正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_67,特征向量为正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性变换_68,则
正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_69
两边取转置,得
正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_70
正交旋转因子载荷矩阵Python 旋转因子的正交性证明_旋转矩阵_71
因为A为正交矩阵,所以
正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_72
代入(3)式得
正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性变换_73
又因为正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_74,所以
正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python_75
正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python_76
得证。

几何分析

这里首先要明白特征根表示的几何意义

正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性代数_77


正交旋转因子载荷矩阵Python 旋转因子的正交性证明_线性变换_78


可见,当正交旋转因子载荷矩阵Python 旋转因子的正交性证明_正交旋转因子载荷矩阵Python_79正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_80时,原向量和新向量处在一条直线上,正交旋转因子载荷矩阵Python 旋转因子的正交性证明_矩阵_67表示的是新向量相对于原向量伸缩变换的幅度

在旋转变换中,空间新向量和原向量的长度是不变的,只是位置发生了改变。所以它的伸缩变换幅度应该是正负一,即没有进行大小的改变,即特征值只能为正负一。

总结

本篇文章证明了旋转矩阵为正交矩阵以及旋转矩阵的特征根只能为正负一,本人现在也在学习这方面的知识,如果文章出现了错误,欢迎大家交流指正~