旋转矩阵为什么是很多正余弦函数值的集合,旋转矩阵有什么性质?旋转矩阵出现的意义在哪里?二维旋转和三维旋转的表达式有什么不同?
本文首先推导了二维情况下旋转矩阵代数及矩阵表达式,然后将结果推广到三维。
假设点 P P P在坐标系 { B } \{B\} {B}的坐标为 P = { x , y } P=\{x,y\} P={x,y},此时存在另一坐标系 { A } \{A\} {A},能否给出相同点 P P P在 { A } \{A\} {A}坐标系下的坐标值 P ′ = { x ′ , y ′ } P'=\{x',y'\} P′={x′,y′}?答案是肯定的,前提是已知这两个坐标系 { A } \{A\} {A} { B } \{B\} {B}之间的关系,当两个坐标系之间的关系为纯旋转时,旋转矩阵就是用来描述两个坐标系之间的关系的一种表达。(简单来说,就是已知 { B } \{B\} {B}下的点坐标,求 { A } \{A\} {A}下的点坐标)。如下图:

{
A
}
\{A\}
{A}坐标系逆时针转
θ
\theta
θ度与
{
B
}
\{B\}
{B}中标系完全重合,为了方便描述,我们假设原点到
P
P
P的距离为
r
r
r,考虑坐标系
{
B
}
\{B\}
{B},根据直角坐标系定义有:
x
=
r
cos
α
y
=
r
sin
α
(1)
x=r\cos\alpha\\ y=r\sin\alpha\tag{1}
x=rcosαy=rsinα(1)
考虑坐标系
{
A
}
\{A\}
{A},有:
x
′
=
r
cos
(
α
+
θ
)
y
′
=
r
sin
(
α
+
θ
)
(2)
x'=r\cos(\alpha+\theta)\\ y'=r\sin(\alpha+\theta)\tag{2}
x′=rcos(α+θ)y′=rsin(α+θ)(2)
展开后的表达式为:
x
′
=
r
(
cos
α
cos
θ
−
sin
α
sin
θ
)
y
′
=
r
(
sin
θ
cos
α
+
cos
θ
sin
α
)
(3)
x'=r(\cos\alpha\cos\theta-\sin\alpha\sin\theta)\\ y'=r(\sin\theta\cos\alpha+\cos\theta\sin\alpha)\tag{3}
x′=r(cosαcosθ−sinαsinθ)y′=r(sinθcosα+cosθsinα)(3)
将(1)带入(3)得:
x
′
=
x
cos
α
−
y
sin
α
y
′
=
y
cos
α
+
x
sin
α
(4)
x'=x\cos\alpha-y\sin\alpha\\ y'=y\cos\alpha+x\sin\alpha\tag{4}
x′=xcosα−ysinαy′=ycosα+xsinα(4)
(4)就是我们要找的,实现同一个点在不同坐标系下的代数表达式,这个表达式完成了由
{
A
}
\{A\}
{A}表示的点到
{
B
}
\{B\}
{B}坐标系下的点的转换。将其写成矩阵形式:
[
x
′
y
′
]
=
[
cos
α
−
sin
α
sin
α
cos
α
]
[
x
y
]
(5)
记上式中正余弦值构成的矩阵为
A
B
R
^B_AR
ABR,表示由
{
A
}
\{A\}
{A}坐标系切换到
{
B
}
\{B\}
{B}的旋转矩阵,对于
{
B
}
\{B\}
{B}下所有点都能通过左乘这个旋转矩阵得到。记
B
P
^BP
BP为坐标系
{
B
}
\{B\}
{B}下的点,
A
P
^AP
AP为坐标系
{
A
}
\{A\}
{A}下的点,所以(5)可写成:
A
P
=
B
A
R
B
P
(6)
^AP=^A_BR^BP\tag{6}
AP=BARBP(6)
所以二维旋转矩阵的表达式为:
B
A
R
=
[
cos
α
−
sin
α
sin
α
cos
α
]
(7)
^A_BR=
对于二维空间,旋转绕着
X
×
Y
X\times Y
X×Y方向进行旋转,从箭头反方向观察旋转行为,顺时针角度为正,逆时针为负,三维空间纯旋转的话,将会有三种情况,分别是沿着坐标系的
X
X
X
Y
Y
Y
Z
Z
Z反方向观察旋转情况,同样是“顺正逆负”。下面是三种情况旋转一定角度的平面图:



以第一个,绕
Z
Z
Z旋转为例,说明其旋转矩阵表达式。假设旋转前的点为
O
X
Y
P
=
{
x
,
y
,
z
}
^{OXY}P=\{x,y,z\}
OXYP={x,y,z},旋转后的点记为
O
X
′
Y
′
P
=
{
x
′
,
y
′
,
z
′
}
^{OX'Y'}P=\{x',y',z'\}
OX′Y′P={x′,y′,z′},原坐标系向新坐标系旋转
θ
\theta
θ与新坐标完全重合,类似于二维空间下的旋转矩阵的推导:
x
′
=
x
cos
α
−
y
sin
α
y
′
=
y
cos
α
+
x
sin
α
z
′
=
z
(8)
写成矩阵形式:
[
x
′
y
′
z
′
]
=
[
cos
α
−
sin
α
0
sin
α
cos
α
0
0
0
1
]
[
x
′
y
′
z
′
]
(9)
记这个旋转矩阵为
r
o
t
z
rotz
rotz:
r
o
t
z
(
θ
)
=
[
cos
α
−
sin
α
0
sin
α
cos
α
0
0
0
1
]
(10)
rotz(\theta)=
同理可以得到
r
o
t
y
roty
roty和
r
o
t
x
rotx
rotx:
r
o
t
y
(
θ
)
=
[
cos
θ
0
sin
θ
0
1
0
−
sin
θ
0
cos
θ
]
(11)
roty(\theta)=
r
o
t
x
(
θ
)
=
[
1
0
0
0
cos
θ
sin
θ
0
−
sin
θ
cos
θ
]
(12)
rotx(\theta)=
前面说到的是由于坐标系切换引起的点坐标的变化,如果空间中的一点真的绕某个轴转动,那么这个点应该如何变化?如下图:

P
(
x
,
y
)
P(x,y)
P(x,y)点逆时针旋转到
P
′
(
x
′
,
y
′
)
P'(x',y')
P′(x′,y′),,旋转前有方程:
x
=
r
cos
α
y
=
r
sin
α
(13)
x=r\cos\alpha\\ y=r\sin\alpha\tag{13}
x=rcosαy=rsinα(13)
旋转后,半径
r
r
r没有发生改变:
x
′
=
cos
(
α
+
θ
)
y
′
=
sin
(
α
+
θ
)
(14)
x'=\cos(\alpha+\theta)\\ y'=\sin(\alpha+\theta)\tag{14}
x′=cos(α+θ)y′=sin(α+θ)(14)
展开后有:
x
′
=
r
cos
α
cos
θ
−
r
s
i
n
α
sin
θ
y
′
=
r
sin
α
cos
θ
+
r
cos
α
sin
θ
(15)
x'=r\cos\alpha\cos\theta-rsin\alpha\sin\theta\\ y'=r\sin\alpha\cos\theta+r\cos\alpha\sin\theta\tag{15}
x′=rcosαcosθ−rsinαsinθy′=rsinαcosθ+rcosαsinθ(15)
联立方程(13)(15)有:
x
′
=
x
cos
θ
−
y
sin
θ
y
′
=
y
cos
θ
+
x
sin
θ
(16)
x'=x\cos\theta-y\sin\theta\\ y'=y\cos\theta+x\sin\theta\tag{16}
x′=xcosθ−ysinθy′=ycosθ+xsinθ(16)
写成矩阵形式有:
[
x
′
y
′
]
=
[
cos
θ
−
sin
θ
sin
θ
cos
θ
]
[
x
y
]
(17)
令:
R
=
[
cos
θ
−
sin
θ
sin
θ
cos
θ
]
R=
(17)可以写成:
P
′
=
R
P
(18)
P'=RP\tag{18}
P′=RP(18)
因为只涉及到一个坐标系,所以这个矩阵坐标不加任何字母,这个矩阵可以帮助我们计算旋转之后点的坐标,他也被称为旋转矩阵,和坐标系旋转表达式一模一样,对于三维的点实际旋转的旋转矩阵,这里就不作进一步推导。
旋转矩阵的含义有三个:
两个坐标系若只存在旋转关系,那么这个关系可以用旋转矩阵来表示,这个关系具有方向性,也就是
{
A
}
\{A\}
{A}坐标系到
{
B
}
\{B\}
{B}不等于
{
A
}
\{A\}
{A}到
{
B
}
\{B\}
{B},但是存在以下关系:
B
A
R
=
A
B
R
−
1
(19)
^A_BR=^B_AR^{-1}\tag{19}
BAR=ABR−1(19)
而且由于旋转矩阵是一个单位正交矩阵,所以有:
B
A
R
=
A
B
R
T
(20)
^A_BR=^B_AR^T\tag{20}
BAR=ABRT(20)
在实际使用中,应该明确这个方向性,假如你已知
{
B
}
\{B\}
{B}坐标系下的点
B
P
^BP
BP要求在
{
B
}
\{B\}
{B}下的点,那么旋转矩阵的
θ
\theta
θ变量值,应该是
{
A
}
\{A\}
{A}坐标系沿着哪个方向旋转多少角度,如果是顺时针 ,那么这个值应该是负数,反之则是一个正数。
Tips:如何确定旋转矩阵的正负?对于点实际旋转类型的旋转矩阵,应该是旋转前是逆时针旋转多少度到达新的点;对于点在不同坐标系下的旋转矩阵,应该是目标坐标系是如何旋转至现在点所在坐标系的。