3D坐标系旋转Z轴
案例

在三维空间中,已知红色点在蓝色坐标系中的位置为(x_1, y_1, z_1).
已知蓝色坐标系是围绕黑色坐标系着Z轴旋转了\alpha角度。
求解:红色点在黑色坐标系中的位置(x_2, y_2, z_2)
分析与推导
蓝色坐标系
我们将原点定义为O,将红色点定义为P。

红色点在蓝色坐标系中的坐标点,我们可以看做是向量\vec {OP}

我们可以将三维空间的点和坐标系的关系理解为一个长方体

根据长方体向量计算经验,我们可以得出以下的结论:
\vec {OP}
=
\vec {X}
+
\vec {Y}
+
\vec {Z}

其中:
我们采用向量缩放的特点,在X轴方向定义单位向量\vec {i_a}, 长度为1,方向沿着X轴正向;在Y轴方向定义单位向量\vec {j_a}, 长度为1,方向沿着Y轴正向;在Z轴方向定义单位向量\vec {k_a}, 长度为1,方向沿着Z轴正向。那么:
\vec {X}
=
x_a
\cdot
\vec {i_a}
\vec {Y}
=
y_a
\cdot
\vec {j_a}
\vec {Z}
=
z_a
\cdot
\vec {k_a}
其中,x_a,y_a,z_a分别代表的在X,Y,Z方向上的数量,其实他们就是P点在蓝色坐标系中的坐标对应的值\vec {x_1},\vec {y_1},\vec {z_1}
那么其实:
\vec {X}
=
x_1
\cdot
\vec {i_a}
\vec {Y}
=
y_1
\cdot
\vec {j_a}
\vec {Z}
=
z_1
\cdot
\vec {k_a}
我们已知的是:
\vec {OP}
=
\vec {X}
+
\vec {Y}
+
\vec {Z}
那么我们可以得到:
\vec {OP}
=
x_1 \cdot \vec {i_a}
+
y_1 \cdot \vec {j_a}
+
z_1 \cdot \vec {k_a}
黑色坐标系
我们将原点定义为O,将红色点定义为P。

红色点在黑色色坐标系中的坐标点,我们可以看做是向量\vec {OP}

我们可以将三维空间的点和坐标系的关系理解为一个长方体

根据长方体向量计算经验,我们可以得出以下的结论:
\vec {OP}
=
\vec {X}
+
\vec {Y}
+
\vec {Z}

其中:
我们采用向量缩放的特点,在X轴方向定义单位向量\vec {i_b}, 长度为1,方向沿着X轴正向;在Y轴方向定义单位向量\vec {j_b}, 长度为1,方向沿着Y轴正向;在Z轴方向定义单位向量\vec {k_b}, 长度为1,方向沿着Z轴正向。那么:
\vec {X}
=
x_b
\cdot
\vec {i_b}
\vec {Y}
=
y_b
\cdot
\vec {j_b}
\vec {Z}
=
z_b
\cdot
\vec {k_b}
其中,x_b,y_b,z_b分别代表的在X,Y,Z方向上的数量,其实他们就是P点在黑色坐标系中的坐标对应的值\vec {x_2},\vec {y_2},\vec {z_2}
那么其实:
\vec {X}
=
x_2
\cdot
\vec {i_b}
\vec {Y}
=
y_2
\cdot
\vec {j_b}
\vec {Z}
=
z_2
\cdot
\vec {k_b}
我们已知的是:
\vec {OP}
=
\vec {X}
+
\vec {Y}
+
\vec {Z}
那么我们可以得到:
\vec {OP}
=
x_2 \cdot \vec {i_b}
+
y_2 \cdot \vec {j_b}
+
z_2 \cdot \vec {k_b}
综合分析
对于向量\vec {OP}而言,无论在哪个坐标系,他的大小和方向是不变的,只是观测的坐标系有所变化。
根据前面分析的结论我们可以直接得到:
x_1 \cdot \vec {i_a}
+
y_1 \cdot \vec {j_a}
+
z_1 \cdot \vec {k_a}
=
x_2 \cdot \vec {i_b}
+
y_2 \cdot \vec {j_b}
+
z_2 \cdot \vec {k_b}
推导(1):
式子的两边同时乘以\vec {i_b}:
x_1 \cdot \vec {i_a} \cdot \vec {i_b}
+
y_1 \cdot \vec {j_a} \cdot \vec {i_b}
+
z_1 \cdot \vec {k_a} \cdot \vec {i_b}
=
x_2 \cdot \vec {i_b} \cdot \vec {i_b}
+
y_2 \cdot \vec {j_b} \cdot \vec {i_b}
+
z_2 \cdot \vec {k_b} \cdot \vec {i_b}
观察右侧部分中:
\vec {i_b} \cdot \vec {i_b} = 1
\vec {j_b} \cdot \vec {i_b} = 0
\vec {k_b} \cdot \vec {i_b} = 0
因此:
x_1 \cdot \vec {i_a} \cdot \vec {i_b}
+
y_1 \cdot \vec {j_a} \cdot \vec {i_b}
+
z_1 \cdot \vec {k_a} \cdot \vec {i_b}
=
x_2 \cdot 1
+
y_2 \cdot 0
+
z_2 \cdot 0
我们可以得出结论:
x_2
=
x_1 \cdot \vec {i_a} \cdot \vec {i_b}
+
y_1 \cdot \vec {j_a} \cdot \vec {i_b}
+
z_1 \cdot \vec {k_a} \cdot \vec {i_b}
推导(2):
式子的两边同时乘以\vec {j_b}:
x_1 \cdot \vec {i_a} \cdot \vec {j_b}
+
y_1 \cdot \vec {j_a} \cdot \vec {j_b}
+
z_1 \cdot \vec {k_a} \cdot \vec {j_b}
=
x_2 \cdot \vec {i_b} \cdot \vec {j_b}
+
y_2 \cdot \vec {j_b} \cdot \vec {j_b}
+
z_2 \cdot \vec {k_b} \cdot \vec {j_b}
观察右侧部分中:
\vec {i_b} \cdot \vec {j_b} = 0
\vec {j_b} \cdot \vec {j_b} = 1
\vec {k_b} \cdot \vec {j_b} = 0
因此:
x_1 \cdot \vec {i_a} \cdot \vec {i_b}
+
y_1 \cdot \vec {j_a} \cdot \vec {i_b}
+
z_1 \cdot \vec {k_a} \cdot \vec {i_b}
=
x_2 \cdot 0
+
y_2 \cdot 1
+
z_2 \cdot 0
我们可以得出结论:
y_2
=
x_1 \cdot \vec {i_a} \cdot \vec {j_b}
+
y_1 \cdot \vec {j_a} \cdot \vec {j_b}
+
z_1 \cdot \vec {k_a} \cdot \vec {j_b}
推导(3):
式子的两边同时乘以\vec {k_b}:
x_1 \cdot \vec {i_a} \cdot \vec {k_b}
+
y_1 \cdot \vec {j_a} \cdot \vec {k_b}
+
z_1 \cdot \vec {k_a} \cdot \vec {k_b}
=
x_2 \cdot \vec {i_b} \cdot \vec {k_b}
+
y_2 \cdot \vec {j_b} \cdot \vec {k_b}
+
z_2 \cdot \vec {k_b} \cdot \vec {k_b}
观察右侧部分中:
\vec {i_b} \cdot \vec {k_b} = 0
\vec {j_b} \cdot \vec {k_b} = 0
\vec {k_b} \cdot \vec {k_b} = 1
因此:
x_1 \cdot \vec {i_a} \cdot \vec {i_b}
+
y_1 \cdot \vec {j_a} \cdot \vec {i_b}
+
z_1 \cdot \vec {k_a} \cdot \vec {i_b}
=
x_2 \cdot 0
+
y_2 \cdot 0
+
z_2 \cdot 1
我们可以得出结论:
z_2
=
x_1 \cdot \vec {i_a} \cdot \vec {k_b}
+
y_1 \cdot \vec {j_a} \cdot \vec {k_b}
+
z_1 \cdot \vec {k_a} \cdot \vec {k_b}
综合推导:
已知结论:
x_2
=
x_1 \cdot \vec {i_a} \cdot \vec {i_b}
+
y_1 \cdot \vec {j_a} \cdot \vec {i_b}
+
z_1 \cdot \vec {k_a} \cdot \vec {i_b}
y_2
=
x_1 \cdot \vec {i_a} \cdot \vec {j_b}
+
y_1 \cdot \vec {j_a} \cdot \vec {j_b}
+
z_1 \cdot \vec {k_a} \cdot \vec {j_b}
z_2
=
x_1 \cdot \vec {i_a} \cdot \vec {k_b}
+
y_1 \cdot \vec {j_a} \cdot \vec {k_b}
+
z_1 \cdot \vec {k_a} \cdot \vec {k_b}
通过矩阵转换为:
\left[\begin{matrix}
x_2 \\
y_2 \\
z_2
\end{matrix}\right]
=
\left[\begin{matrix}
\vec {i_a} \cdot \vec {i_b} & \vec {j_a} \cdot \vec {i_b} & \vec {k_a} \cdot \vec {i_b} \\
\vec {i_a} \cdot \vec {j_b} & \vec {j_a} \cdot \vec {j_b} & \vec {k_a} \cdot \vec {j_b} \\
\vec {i_a} \cdot \vec {k_b} & \vec {j_a} \cdot \vec {k_b} & \vec {k_a} \cdot \vec {k_b} \\
\end{matrix}\right]
\cdot
\left[\begin{matrix}
x_1 \\
y_1 \\
z_1
\end{matrix}\right]
(1): \vec {i_a} \cdot \vec {i_b}

\vec {i_a} \cdot \vec {i_b}
=
1 \cdot 1 \cdot cos(\alpha)
\vec {i_a} \cdot \vec {i_b}
=
cos(\alpha)
(2): \vec {j_a} \cdot \vec {i_b}

\vec {j_a} \cdot \vec {i_b}
=
1 \cdot 1 \cdot cos(90°+\alpha)
\vec {j_a} \cdot \vec {i_b}
=
-sin(\alpha)
(3): $\vec {k_a} \cdot \vec {i_b} $

\vec {k_a} \cdot \vec {i_b}
=
1 \cdot 1 \cdot cos(90°)
\vec {k_a} \cdot \vec {i_b}
=
0
(4): \vec {i_a} \cdot \vec {j_b}

\vec {i_a} \cdot \vec {j_b}
= 1 \cdot 1 \cdot cos(90°-\alpha)
\vec {i_a} \cdot \vec {j_b}
= sin(\alpha)
(5): \vec {j_a} \cdot \vec {j_b}

\vec {j_a} \cdot \vec {j_b}
=
1 \cdot 1 \cdot cos(\alpha)
\vec {j_a} \cdot \vec {j_b}
=
cos(\alpha)
(6): \vec {k_a} \cdot \vec {j_b}

\vec {k_a} \cdot \vec {j_b}
=
1 \cdot 1 \cdot cos(90°)
\vec {k_a} \cdot \vec {j_b}
=
0
(7): \vec {i_a} \cdot \vec {k_b}

\vec {i_a} \cdot \vec {k_b}
=
1 \cdot 1 \cdot cos(90°)
\vec {i_a} \cdot \vec {k_b}
= 0
(8): \vec {j_a} \cdot \vec {k_b}

\vec {j_a} \cdot \vec {k_b}
=
1 \cdot 1 \cdot cos(90°)
\vec {j_a} \cdot \vec {k_b}
= 0
(9): \vec {k_a} \cdot \vec {k_b}

\vec {k_a} \cdot \vec {k_b}
=
1 \cdot 1 \cdot cos(0°)
\vec {k_a} \cdot \vec {k_b}
= 1
综上所述:
\left[\begin{matrix}
x_2 \\
y_2 \\
z_2
\end{matrix}\right]
=
\left[\begin{matrix}
cos(\alpha) & -sin(\alpha) & 0 \\
sin(\alpha) & cos(\alpha) & 0 \\
0 & 0 & 1 \\
\end{matrix}\right]
\cdot
\left[\begin{matrix}
x_1 \\
y_1 \\
z_1
\end{matrix}\right]