旋转矩阵为什么是很多正余弦函数值的集合,旋转矩阵有什么性质?旋转矩阵出现的意义在哪里?二维旋转和三维旋转的表达式有什么不同?
本文首先推导了二维情况下旋转矩阵代数及矩阵表达式,然后将结果推广到三维。
一、二维空间下的旋转矩阵假设点 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}下的点坐标)。如下图:
注意:原坐标系 { B } \{B\} {B}顺时针旋转 θ \theta θ度后与目标坐标系 { A } \{A\} {A}重合,再次强调是顺时针,如果是逆时针应为 − θ -\theta −θ。
{ 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\alpha\cos\theta+\cos\alpha\sin\theta)\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\theta-y\sin\theta\\ y'=y\cos\theta+x\sin\theta\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) \begin{bmatrix} x'\\y' \end{bmatrix}= \begin{bmatrix}\cos\theta&-\sin\theta\\\sin\theta&\cos\theta\end{bmatrix} \begin{bmatrix}x\\y\end{bmatrix}\tag{5} [x′y′]=[cosθsinθ−sinθcosθ][xy](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=\begin{bmatrix}\cos\theta&-\sin\theta\\\sin\theta&\cos\theta\end{bmatrix}\tag{7} BAR=[cosθsinθ−sinθcosθ](7)
二、三维空间下的旋转矩阵对于二维空间,旋转绕着
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)
\begin{aligned} x'&=x\cos\alpha-y\sin\alpha\\ y'&=y\cos\alpha+x\sin\alpha\\ z'&=z\end{aligned} \tag{8}
x′y′z′=xcosα−ysinα=ycosα+xsinα=z(8) 写成矩阵形式:
[
x
′
y
′
z
′
]
=
[
cos
α
−
sin
α
0
sin
α
cos
α
0
0
0
1
]
[
x
′
y
′
z
′
]
(9)
\begin{bmatrix} x'\\y'\\z' \end{bmatrix}=\begin{bmatrix}\cos\alpha&-\sin\alpha&0\\\sin\alpha&\cos\alpha&0\\0&0&1\end{bmatrix}\begin{bmatrix}x'\\y'\\z'\end{bmatrix}\tag{9}
⎣⎡x′y′z′⎦⎤=⎣⎡cosαsinα0−sinαcosα0001⎦⎤⎣⎡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)=\begin{bmatrix}\cos\alpha&-\sin\alpha&0\\\sin\alpha&\cos\alpha&0\\0&0&1\end{bmatrix}\tag{10}
rotz(θ)=⎣⎡cosαsinα0−sinαcosα0001⎦⎤(10) 同理可以得到
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)= \begin{bmatrix} \cos\theta&0&\sin\theta\\ 0&1&0\\ -\sin\theta&0&\cos\theta \end{bmatrix}\tag{11}
roty(θ)=⎣⎡cosθ0−sinθ010sinθ0cosθ⎦⎤(11)
r o t x ( θ ) = [ 1 0 0 0 cos θ sin θ 0 − sin θ cos θ ] (12) rotx(\theta)= \begin{bmatrix} 1&0&0\\ 0&\cos\theta&\sin\theta\\ 0&-\sin\theta&\cos\theta \end{bmatrix}\tag{12} rotx(θ)=⎣⎡1000cosθ−sinθ0sinθcosθ⎦⎤(12)
三、点旋转对应旋转矩阵前面说到的是由于坐标系切换引起的点坐标的变化,如果空间中的一点真的绕某个轴转动,那么这个点应该如何变化?如下图: 注意:变换前的点
P
P
P绕着坐标轴逆时针旋转
θ
\theta
θ后到达新的位置
P
′
P'
P′。
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) \begin{bmatrix}x'\\y'\end{bmatrix}=\begin{bmatrix}\cos\theta&-\sin\theta\\\sin\theta&\cos\theta\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}\tag{17} [x′y′]=[cosθsinθ−sinθcosθ][xy](17) 令: R = [ cos θ − sin θ sin θ cos θ ] R=\begin{bmatrix}\cos\theta&-\sin\theta\\\sin\theta&\cos\theta\end{bmatrix} R=[cosθsinθ−sinθcosθ] (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:旋转矩阵中角度 θ \theta θ的正负?答:如果是旋转的是坐标系,那么应该 θ \theta θ的大小是旋转的角度,旋转的正负则是顺时针为正逆时针为负;如果旋转的是点, θ \theta θ的大小则是旋转前后向量夹角,此时顺时针为负,逆时针为正。
20221208 修改了推导上的错误