为了便于理解,我们先来做一道简单的数学题:
如图,坐标系OX1Y1OX_1Y_1OX1Y1经过逆时针旋转θ\thetaθ角变换为坐标系OX2Y2OX_2Y_2OX2Y2,P点坐标由(x1,y1)(x_1,y_1)(x1,y1)→(x2,y2)(x_2,y_2)(x2,y2)。
问:怎样用用x1,y1,θx_1,y_1,\thetax1,y1,θ表示x2,y2x_2,y_2x2,y2 ?
解:
由图可得:
a=y1−b=y1−x1tanθ(1)
a=y_1-b=y_1-x_1tan\theta\tag{1}
a=y1−b=y1−x1tanθ(1)
x2=c+d=asinθ+x1cosθ(2)
x_2 = c + d = asin\theta + \frac{x_1}{cos\theta} \tag{2}
x2=c+d=asinθ+cosθx1(2)
y2=acosθ(3)
y_2 = a cos\theta \tag{3}
y2=acosθ(3)
将(1)式代入(2)、(3)式并化简得:
x2=x1cosθ+y1sinθ(4)
x_2 = x_1cos\theta+y_1sin\theta \tag{4}
x2=x1cosθ+y1sinθ(4)
y2=−x1sinθ+y1cosθ(5)
y_2 = -x_1sin\theta + y_1cos\theta \tag{5}
y2=−x1sinθ+y1cosθ(5)
(4)、(5)式的矩阵形式表示:
[x2y2]=[cosθsinθ−sinθcosθ][x1y1](6)
\left[ \begin{matrix}
x_2 \\
y_2 \\
\end{matrix} \right]=\\
\left[ \begin{matrix}
cos\theta & sin\theta\\
-sin\theta & cos\theta
\end{matrix} \right]
\left[ \begin{matrix}
x_1 \\
y_1
\end{matrix} \right] \tag{6}
[x2y2]=[cosθ−sinθsinθcosθ][x1y1](6)
该式子展开即与(4)、(5)式形式完全相同。
(这个过程希望大家亲手用笔算一下,只是一个简单的几何问题,并没有难以理解的地方,只有深刻理解了这个转换过程才能理解接下来的三维空间直角坐标系)
三维坐标系
其实对于三维空间直角坐标系的旋转变换,形式上和二维空间中的一样,只是二维坐标系中我们只需要旋转一次,而三维坐标系中我们需要旋转3次。即:
(1) 绕 XXX 轴旋转 εX\varepsilon_XεX 角。
(2) 绕 YYY 轴旋转 εY\varepsilon_YεY 角。
(3) 绕 ZZZ 轴旋转 εZ\varepsilon_ZεZ 角。
此处:εX,εY,εZ\varepsilon_X,\varepsilon_Y,\varepsilon_ZεX,εY,εZ即为三维空间直角坐标变换的三个旋转角,也称为欧拉角。
下面进行公式推导:
(1) 绕 XXX 轴旋转 εX\varepsilon_XεX 角。
即:X坐标不变,Y,Z坐标变换,如图:
现在类比一下我们之前推导的二维坐标系中的情况:
不看X轴,把这里的Y、Z轴看成之前的X、Y轴,这里的εX\varepsilon_XεX看之前的θ\thetaθ
得:
[y2z2]=[cosεXsinεX−sinεXcosεX][y1z1](7)
\left[ \begin{matrix}
y_2 \\
z_2 \\
\end{matrix} \right]=\\
\left[ \begin{matrix}
cos\varepsilon_X & sin\varepsilon_X\\
-sin\varepsilon_X & cos\varepsilon_X
\end{matrix} \right]
\left[ \begin{matrix}
y_1 \\
z_1
\end{matrix} \right] \tag{7}
[y2z2]=[cosεX−sinεXsinεXcosεX][y1z1](7)
加上没有变化的xxx:
[x2y2z2]=[1000cosεXsinεX0−sinεXcosεX][x1y1z1](8)
\left[ \begin{matrix}
x_2\\
y_2 \\
z_2 \\
\end{matrix} \right]=\\
\left[ \begin{matrix}
1 & 0 & 0\\
0 & cos\varepsilon_X & sin\varepsilon_X\\
0 & -sin\varepsilon_X & cos\varepsilon_X
\end{matrix} \right]
\left[ \begin{matrix}
x_1 \\
y_1 \\
z_1
\end{matrix} \right] \tag{8}
⎣⎡x2y2z2⎦⎤=⎣⎡1000cosεX−sinεX0sinεXcosεX⎦⎤⎣⎡x1y1z1⎦⎤(8)
(7)式和(8)式的展开形式其实一样,仅仅多了一个x2=x1x_2=x_1x2=x1。
到这里,我们找到了第一个旋转矩阵:
R1(εX)=[1000cosεXsinεX0−sinεXcosεX](9)
R_1(\varepsilon_X)=
\left[ \begin{matrix}
1 & 0 & 0\\
0 & cos\varepsilon_X & sin\varepsilon_X\\
0 & -sin\varepsilon_X & cos\varepsilon_X
\end{matrix} \right] \tag{9}
R1(εX)=⎣⎡1000cosεX−sinεX0sinεXcosεX⎦⎤(9)
至此,完成了第一次旋转操作。
(2) 绕 YYY 轴旋转 εY\varepsilon_YεY 角
与前面同理,找到第二个旋转矩阵:
R2(εY)=[cosεY0−sinεY010sinεYcosεY0](10)
R_2(\varepsilon_Y)=
\left[ \begin{matrix}
cos\varepsilon_Y & 0 &-sin\varepsilon_Y\\
0 & 1 &0\\
sin\varepsilon_Y& cos\varepsilon_Y& 0
\end{matrix} \right] \tag{10}
R2(εY)=⎣⎡cosεY0sinεY01cosεY−sinεY00⎦⎤(10)
(3) 绕 ZZZ 轴旋转 εZ\varepsilon_ZεZ 角
与前面同理,找到第三个旋转矩阵:
R3(εZ)=[cosεZsinεZ0−sinεZcosεZ0001](11)
R_3(\varepsilon_Z)=
\left[ \begin{matrix}
cos\varepsilon_Z & sin\varepsilon_Z &0\\
-sin\varepsilon_Z &cos\varepsilon_Z &0\\
0& 0& 1
\end{matrix} \right] \tag{11}
R3(εZ)=⎣⎡cosεZ−sinεZ0sinεZcosεZ0001⎦⎤(11)
现在,我们分别找到了绕三个轴旋转的旋转矩阵
(4) 合并三次旋转
令:R0=R1(εX)R2(εY)R3(εZ)R_0 = R_1(\varepsilon_X)R_2(\varepsilon_Y)R_3(\varepsilon_Z)R0=R1(εX)R2(εY)R3(εZ)
有:
[X2Y2Z2]=R1(εX)R2(εY)R3(εZ)[X1Y1Z1]=R0[X1Y1Z1](12)
\left[ \begin{matrix}
X_2\\
Y_2\\
Z_2
\end{matrix} \right]
=\\
R_1(\varepsilon_X)R_2(\varepsilon_Y)R_3(\varepsilon_Z)
\left[ \begin{matrix}
X_1\\
Y_1\\
Z_1
\end{matrix} \right]=\\
R_0
\left[ \begin{matrix}
X_1\\
Y_1\\
Z_1
\end{matrix} \right] \tag{12}
⎣⎡X2Y2Z2⎦⎤=R1(εX)R2(εY)R3(εZ)⎣⎡X1Y1Z1⎦⎤=R0⎣⎡X1Y1Z1⎦⎤(12)
将(9)、(10)、(11)式代入(12)式得:
R0=[cosεYcosεZcosεYsinεZ−sinεY−cosεXsinεZ+sinεXsinεYcosεZcosεXcosεZ+sinεXsinεYsinεZsinεXcosεYsinεXsinεZ+cosεXsinεYcosεZ−sinεXcosεZ+cosεXsinεYsinεZcosεXcosεY](13)
R_0=\\
\left[ \begin{matrix}
cos\varepsilon_Ycos\varepsilon_Z & cos\varepsilon_Ysin\varepsilon_Z & -sin\varepsilon_Y\\
-cos\varepsilon_Xsin\varepsilon_Z+sin\varepsilon_Xsin\varepsilon_Ycos\varepsilon_Z & cos\varepsilon_Xcos\varepsilon_Z+sin\varepsilon_Xsin\varepsilon_Ysin\varepsilon_Z &
sin\varepsilon_Xcos\varepsilon_Y\\
sin\varepsilon_Xsin\varepsilon_Z+cos\varepsilon_Xsin\varepsilon_Ycos\varepsilon_Z & -sin\varepsilon_Xcos\varepsilon_Z+cos\varepsilon_Xsin\varepsilon_Ysin\varepsilon_Z &
cos\varepsilon_Xcos\varepsilon_Y\\
\end{matrix} \right] \tag{13}
R0=⎣⎡cosεYcosεZ−cosεXsinεZ+sinεXsinεYcosεZsinεXsinεZ+cosεXsinεYcosεZcosεYsinεZcosεXcosεZ+sinεXsinεYsinεZ−sinεXcosεZ+cosεXsinεYsinεZ−sinεYsinεXcosεYcosεXcosεY⎦⎤(13)
到这里,我们的计算工作就结束了,最终求出的R0R_0R0就是我们所需要的旋转矩阵。
(PS:大家知道,矩阵乘法没有交换律,所以我们进行三次旋转的顺序不同,最终得到的旋转矩阵也不一样,这里用的是X-Y-Z的的旋转顺序。)
可参考《大地测量学》P44(武汉大学出版社) 第二版