本人初学增强现实课程,其中涉及到了矩阵变换的知识点。书中使用三维正交矩阵表示物体的旋转,不过没有给出相关的证明。本人查阅了相关资料,整理了一下各家思路,照着自己的理解写了一下旋转矩阵为正交矩阵的证明以及相关性质的证明。如有错误,欢迎交流指正~
另外,本文是以一种零基础小白的角度来写,对一些内容会进行非常详细的解释,对一些大佬来说可能会有些冗余,在此先提前告知~
证明旋转矩阵为正交矩阵
设最开始空间的坐标系为笛卡尔坐标系,用
V
A
{V}_A
VA表示空间A的任一矩阵,
V
B
{V}_B
VB为经过旋转后到达空间B的矩阵。因为旋转过程进行的是线性变换,所以可以用矩阵
R
{R}
R表示旋转过程。列出公式即为:
V
B
=
R
⋅
V
A
{V}_B={R}\cdot {V}_A
VB=R⋅VA
我们需要证明的即:
R
{R}
R 为正交矩阵
1. 笛卡尔坐标系:就是直角坐标系和斜坐标系的统称。在这里就理解成我们平时用的空间直角坐标系就可以
2. 空间中的矩阵:也就是空间中的向量,也可以理解成空间中任意一点的坐标。将其分解成x,y,z三个方向上的分量,就组成一个3x3的矩阵
3. 为什么旋转过程是线性变换?
线性变换可以看作是坐标系“保持网格线平行并等距分布”的变换。旋转过程可以看作空间A整个坐标系绕着原点旋转一定角度到达空间B,其坐标之间的距离以及直线间的平行关系是没有发生变化的。更详细的解释可以参考链接视频:【官方双语/合集】线性代数的本质 - 系列合集 03:矩阵与线性变换
一些前置知识点
1.在三维坐标系中,一旦单位矩阵的旋转矩阵确定了,其他任一矩阵的旋转矩阵也就确定了
本句话证明如下:
设空间A的一个向量
V
A
=
a
i
⃗
+
b
j
⃗
+
c
k
⃗
{V}_A =a \vec{i}+b \vec{j}+c \vec{k}
VA=ai+bj+ck
i
⃗
\vec{i}
i、
j
⃗
\vec{j}
j、
k
⃗
\vec{k}
k 分别为x、y、z轴上的单位向量,则
V
A
{V}_A
VA 向量可表示为:
V
A
=
[
1
0
0
0
1
0
0
0
1
]
[
a
b
c
]
=
[
a
b
c
]
{V}_A=\begin{bmatrix} 1& 0& 0\\ 0& 1& 0\\ 0& 0& 1 \end{bmatrix}\begin{bmatrix} a\\ b\\ c \end{bmatrix}=\begin{bmatrix} a\\ b\\ c \end{bmatrix}
VA=⎣⎡100010001⎦⎤⎣⎡abc⎦⎤=⎣⎡abc⎦⎤
则
R
⋅
V
A
=
R
⋅
[
1
0
0
0
1
0
0
0
1
]
[
a
b
c
]
(1)
{R}\cdot {V}_A={R}\cdot\begin{bmatrix} 1& 0& 0\\ 0& 1& 0\\ 0& 0& 1 \end{bmatrix}\begin{bmatrix} a\\ b\\ c \end{bmatrix} \tag {1}
R⋅VA=R⋅⎣⎡100010001⎦⎤⎣⎡abc⎦⎤(1)
令 E A {E}_A EA为空间A的单位矩阵, E B {E}_B EB为空间B的单位矩阵,则
E B = R ⋅ E A (2) {E}_B={R}\cdot{E}_A \tag {2} EB=R⋅EA(2)
将(2)式代入(1)式得
R
⋅
V
A
=
R
⋅
E
A
⋅
[
a
b
c
]
=
E
B
[
a
b
c
]
=
V
B
{R}\cdot {V}_A={R}\cdot{E}_A\cdot\begin{bmatrix} a\\ b\\ c \end{bmatrix} ={E}_B\begin{bmatrix} a\\ b\\ c \end{bmatrix}={V}_B
R⋅VA=R⋅EA⋅⎣⎡abc⎦⎤=EB⎣⎡abc⎦⎤=VB
即可得到B空间下该向量对应的坐标,故得证:一旦单位矩阵的旋转矩阵确定了,其他任一矩阵的旋转矩阵也就确定了。
那我们可以令
V
A
{V}_A
VA为单位矩阵,这样求出来的
R
R
R对空间A的任一矩阵同样适用
2. 如何证明一个矩阵为正交矩阵
正交矩阵定义(来自百度百科):
我们知道
R
R
R 是一个满秩矩阵,所以存在其逆矩阵
R
−
1
R^{-1}
R−1,且有
R
−
1
R
=
E
R^{-1} R=E
R−1R=E 。
故我们只需要证明
R
−
1
=
R
T
R^{-1} =R^{T}
R−1=RT
即可证明
R
R
R 为正交矩阵
又因为 R R R 表示的是从空间A到空间B的旋转变换,所以可知 R − 1 R^{-1} R−1表示的就是其逆过程,即从空间B到空间A的旋转还原,这一点在下面的证明中比较重要。
解释一下为什么R是个满秩矩阵:如果R不是满秩矩阵,那么存在一行或一列全为0向量,那么它就不能表示所有三个轴的向量分量;这种变换会将一个三维的矩阵变换成了二维,也就是我们说的退化。与正常旋转产生的效果不一致。所以R一定是个满秩矩阵
证明
设 X A = ( 1 , 0 , 0 ) {X}_A=(1,0,0) XA=(1,0,0), Y A = ( 0 , 1 , 0 ) {Y}_A=(0,1,0) YA=(0,1,0), Z A = ( 0 , 0 , 1 ) {Z}_A=(0,0,1) ZA=(0,0,1), V A = [ X A Y A Z A ] T {V}_A=\begin{bmatrix} {X}_A& {Y}_A& {Z}_A \end{bmatrix}^{T} VA=[XAYAZA]T
因为
V A ⋅ R = [ X A Y A Z A ] ⋅ R = [ X A ⋅ R Y A ⋅ R Z A ⋅ R ] = V B {V}_A\cdot R=\begin{bmatrix} {X}_A\\ {Y}_A\\ {Z}_A \end{bmatrix} \cdot R=\begin{bmatrix} {X}_A\cdot R\\ {Y}_A\cdot R\\ {Z}_A\cdot R \end{bmatrix}={V}_B VA⋅R=⎣⎡XAYAZA⎦⎤⋅R=⎣⎡XA⋅RYA⋅RZA⋅R⎦⎤=VB
设 V B = [ X B Y B Z B ] T {V}_B=\begin{bmatrix} {X}_B& {Y}_B& {Z}_B \end{bmatrix}^{T} VB=[XBYBZB]T
所以
X
B
=
(
1
,
0
,
0
)
⋅
R
,
Y
B
=
(
0
,
1
,
0
)
⋅
R
,
Z
B
=
(
0
,
0
,
1
)
⋅
R
{X}_B=(1,0,0)\cdot R , {Y}_B=(0,1,0)\cdot R , {Z}_B=(0,0,1)\cdot R
XB=(1,0,0)⋅R,YB=(0,1,0)⋅R,ZB=(0,0,1)⋅R
所以
R
=
[
X
B
Y
B
Z
B
]
T
R=\begin{bmatrix} {X}_B& {Y}_B& {Z}_B \end{bmatrix}^{T}
R=[XBYBZB]T
这里可以这么理解: ( 1 , 0 , 0 ) ⋅ R (1,0,0)\cdot R (1,0,0)⋅R取的是R的第一行向量,与 X B {X}_B XB相等,所以R的第一行向量即为 X B {X}_B XB,其他的以此类推。
设 X B = ( a , b , c ) {X}_B=(a,b,c) XB=(a,b,c), Y B = ( d , e , f ) {Y}_B=(d,e,f) YB=(d,e,f), Z B = ( g , h , i ) {Z}_B=(g,h,i) ZB=(g,h,i),
R = [ X B Y B Z B ] = [ a b c d e f g h i ] R=\begin{bmatrix} {X}_B\\ {Y}_B\\ {Z}_B \end{bmatrix}=\begin{bmatrix} a& b& c\\ d& e& f\\ g& h& i \end{bmatrix} R=⎣⎡XBYBZB⎦⎤=⎣⎡adgbehcfi⎦⎤
我们要找到 R − 1 R^{-1} R−1的表达式,就需要想办法将B空间的向量与A空间联系起来。
这里用到一个知识点,就是点乘(dot product)的几何意义:如下图,我们从点乘的公式(α•β=|α||β|cos<α,β>)可以得到α•β相当于β的模乘上α在β上投影的模,所以当|β|=1时,α•β就是指α在β上投影的模。这一点在下面的内容中非常重要。
因为
X
A
{X}_A
XA为单位向量,所以
X
B
⋅
X
A
=
(
a
,
b
,
c
)
⋅
(
1
,
0
,
0
)
=
a
{X}_B\cdot{X}_A=(a,b,c)\cdot(1,0,0)=a
XB⋅XA=(a,b,c)⋅(1,0,0)=a,表示为
X
B
{X}_B
XB在
X
A
{X}_A
XA上投影的模。所以矩阵R可以表示为:
R = [ a b c d e f g h i ] = [ X B ⋅ X A X B ⋅ Y A X B ⋅ Z A Y B ⋅ X A Y B ⋅ Y A Y B ⋅ Z A Z B ⋅ X A Z B ⋅ Y A Z B ⋅ Z A ] R=\begin{bmatrix} a& b& c\\ d& e& f\\ g& h& i \end{bmatrix}=\begin{bmatrix} {X}_B\cdot{X}_A& {X}_B\cdot{Y}_A& {X}_B\cdot{Z}_A\\ {Y}_B\cdot{X}_A& {Y}_B\cdot{Y}_A& {Y}_B\cdot{Z}_A\\ {Z}_B\cdot{X}_A& {Z}_B\cdot{Y}_A& {Z}_B\cdot{Z}_A \end{bmatrix} R=⎣⎡adgbehcfi⎦⎤=⎣⎡XB⋅XAYB⋅XAZB⋅XAXB⋅YAYB⋅YAZB⋅YAXB⋅ZAYB⋅ZAZB⋅ZA⎦⎤
分析这个矩阵可以看出,矩阵第一行即为向量 X B {X}_B XB分别在 X A {X}_A XA、 Y A {Y}_A YA、 Z A {Z}_A ZA上投影的模的长度, Y B {Y}_B YB、 Z B {Z}_B ZB以此类推。
而对于逆矩阵 R − 1 R^{-1} R−1来说,从空间B变换回空间A应该也遵循同样的规律,即矩阵 R − 1 R^{-1} R−1的第一行应该为向量 X A {X}_A XA与 X B {X}_B XB、 Y B {Y}_B YB、 Z B {Z}_B ZB的点乘, Y A {Y}_A YA、 Z A {Z}_A ZA以此类推,即
R − 1 = [ X A ⋅ X B X A ⋅ Y B X A ⋅ Z B Y A ⋅ X B Y A ⋅ Y B Y A ⋅ Z B Z A ⋅ X B Z A ⋅ Y B Z A ⋅ Z B ] R^{-1}=\begin{bmatrix} {X}_A\cdot{X}_B& {X}_A\cdot{Y}_B& {X}_A\cdot{Z}_B\\ {Y}_A\cdot{X}_B& {Y}_A\cdot{Y}_B& {Y}_A\cdot{Z}_B\\ {Z}_A\cdot{X}_B& {Z}_A\cdot{Y}_B& {Z}_A\cdot{Z}_B \end{bmatrix} R−1=⎣⎡XA⋅XBYA⋅XBZA⋅XBXA⋅YBYA⋅YBZA⋅YBXA⋅ZBYA⋅ZBZA⋅ZB⎦⎤
又因为
R T = [ X B ⋅ X A Y B ⋅ X A Z B ⋅ X A X B ⋅ Y A Y B ⋅ Y A Z B ⋅ Y A X B ⋅ Z A Y B ⋅ Z A Z B ⋅ Z A ] R^{T}=\begin{bmatrix} {X}_B\cdot{X}_A& {Y}_B\cdot{X}_A& {Z}_B\cdot{X}_A\\ {X}_B\cdot{Y}_A& {Y}_B\cdot{Y}_A& {Z}_B\cdot{Y}_A\\ {X}_B\cdot{Z}_A& {Y}_B\cdot{Z}_A& {Z}_B\cdot{Z}_A \end{bmatrix} RT=⎣⎡XB⋅XAXB⋅YAXB⋅ZAYB⋅XAYB⋅YAYB⋅ZAZB⋅XAZB⋅YAZB⋅ZA⎦⎤
点乘满足交换律,所以实际上
R
−
1
=
R
T
R^{-1}=R^{T}
R−1=RT
由上文知,由此得证旋转矩阵R即为正交矩阵。
参考资料:
旋转矩阵(Rotate Matrix)的性质分析
证明:旋转矩阵是正交矩阵
证明旋转矩阵的特征根只能为正负一
由上面我们证明了旋转矩阵为正交矩阵,那么对于正交矩阵的所有性质,旋转矩阵都会满足。这里着重分析一下“特征根只能为正负一”这个性质,这个性质当然也是正交矩阵的性质。
代数证明
设正交矩阵为
A
A
A,特征根为
λ
\lambda
λ,特征向量为
x
x
x,则
A
x
=
λ
x
Ax=\lambda x
Ax=λx
两边取转置,得
x
T
A
T
=
λ
x
T
x^{T} A^{T} =\lambda x^{T}
xTAT=λxT
x
T
A
T
A
x
=
λ
2
x
T
x
(3)
x^{T} A^{T}Ax =\lambda^{2} x^{T}x\tag3
xTATAx=λ2xTx(3)
因为A为正交矩阵,所以
A
T
A
=
E
A^{T}A =E
ATA=E
代入(3)式得
x
T
x
=
λ
2
x
T
x
x^{T} x =\lambda^{2} x^{T}x
xTx=λ2xTx
又因为
x
T
x
≠
0
x^{T}x\neq0
xTx=0,所以
λ
2
=
1
\lambda^{2}=1
λ2=1
λ
=
±
1
\lambda=\pm 1
λ=±1
得证。
几何分析
这里首先要明白特征根表示的几何意义,以下图片内容来自:特征值和特征值的几何意义
可见,当
a
11
x
1
+
a
12
x
2
=
λ
x
1
a_{11} x_{1}+ a_{12} x_{2}=\lambda x_{1}
a11x1+a12x2=λx1且
a
21
x
1
+
a
22
x
2
=
λ
x
2
a_{21} x_{1}+ a_{22} x_{2}=\lambda x_{2}
a21x1+a22x2=λx2时,原向量和新向量处在一条直线上,
λ
\lambda
λ表示的是新向量相对于原向量伸缩变换的幅度。
在旋转变换中,空间新向量和原向量的长度是不变的,只是位置发生了改变。所以它的伸缩变换幅度应该是正负一,即没有进行大小的改变,即特征值只能为正负一。
总结
本篇文章证明了旋转矩阵为正交矩阵以及旋转矩阵的特征根只能为正负一,本人现在也在学习这方面的知识,如果文章出现了错误,欢迎大家交流指正~