空间中的坐标变换
我们考虑将空间直角坐标系中的一点 $\,P_1(x_1,y_1,z_1)\,$ 绕直线 $\,l\colon\dfrac xa=\dfrac yb=\dfrac zc\,$ 逆时针(观察视角使得向量 $\,(a,b,c)\,$ 指向观察者的眼睛,下同)旋转 $\,\theta\,$ 角,得到的点记为 $\,P_2(x_2,y_2,z_2)$,然后尝试找出这两点坐标的关系.
首先,我们熟知平面中的一点绕原点逆时针旋转 $\,\theta\,$ 角坐标变换公式为
$$\begin{pmatrix}x’\\y’\end{pmatrix}=
\begin{pmatrix}\cos\theta&-\sin\theta\\ \sin\theta&\cos\theta\end{pmatrix}\begin{pmatrix}x\\y\end{pmatrix}.$$ 借此,我们可以很快地得出空间中一点绕某条坐标轴转的公式,因为绕坐标轴旋转时有一个坐标分量是不变的,相当于二维时的情形.而对于任意的旋转轴,我们可以尝试通过旋转坐标系,使得直线 $\,l\,$成为$\,z\,$ 轴,然后就变为一点绕 $\,z\,$ 轴旋转的问题了,之后再将坐标系旋转回来即可.
为了使 $\,l\,$ 成为 $\,z\,$ 轴,我们可以这样:
- 先以$\,z\,$轴为轴,旋转坐标系,使得向量$\,(a,b,c)\,$在$\,xOy\,$平面上的投影落在新的$\,x\,$轴上.
- 再以新的$\,y\,$轴为轴,旋转新的坐标系,使得$\,l\,$与更新的$\,z\,$轴重合.
我们记
$$\alpha=\arctan\dfrac ba,\beta=\arctan\dfrac{c}{\sqrt{a^2+b^2}},$$那么对于旧坐标系中的一点$\,(x,y,z)$,它的坐标就变为了
$$\begin{pmatrix}x’\\y’\\z’\end{pmatrix}=\begin{pmatrix}\cos\beta&0&\sin\beta\\0&1&0\\-\sin\beta&0&\cos\beta\end{pmatrix}
\begin{pmatrix}\cos\alpha&\sin\alpha&0\\-\sin\alpha&\cos\alpha&0\\0&0&1\end{pmatrix}
\begin{pmatrix}x\\y\\z\end{pmatrix}.$$要注意的是,这里的$\,\alpha\,$和$\,\beta\,$为正时表示的是坐标系逆时针转动,而点是顺时针转动的.再将新的点绕新的$\,z\,$轴逆时针旋转$\,\theta\,$角,坐标就变为了
$$\begin{pmatrix}x’’\\y’’\\z’’\end{pmatrix}=
\begin{pmatrix}\cos\theta&\sin\theta&0\\-\sin\theta&\cos\theta&0\\0&0&1\end{pmatrix}
\begin{pmatrix}x’\\y’\\z’\end{pmatrix}.$$最后,我们要将坐标系复原,这只需在新坐标的左侧乘上旋转坐标系时对应的矩阵的逆.注意到这些矩阵都是正交矩阵,于是逆就是转置,所以最终的坐标应为
$$\begin{pmatrix}x’’’\\y’’’\\z’’’\end{pmatrix}=
\begin{pmatrix}\cos\alpha&-\sin\alpha&0\\\sin\alpha&\cos\alpha&0\\0&0&1\end{pmatrix}
\begin{pmatrix}\cos\beta&0&-\sin\beta\\0&1&0\\\sin\beta&0&\cos\beta\end{pmatrix}
\begin{pmatrix}x’’\\y’’\\z’’\end{pmatrix}.$$为了使最终的结果更加美观,我们可以令
$$a^2+b^2+c^2=1,$$于是这五个矩阵的积就是
$$\boldsymbol R=\begin{pmatrix}
a^2 (1-\cos \theta)+\cos \theta & a b (1-\cos \theta)-c \sin \theta & a c (1-\cos \theta)+b \sin \theta \\
a b (1-\cos \theta)+c \sin \theta & b^2 (1-\cos \theta)+\cos \theta & b c (1-\cos \theta)-a \sin \theta \\
a c (1-\cos \theta)-b \sin \theta & b c (1-\cos \theta)+a \sin \theta & c^2 (1-\cos \theta)+\cos \theta
\end{pmatrix}.$$可以用 Mathematica 中的 RotationMatrix[]
来验证这一结果。
所以,$P_1\,$和$\,P_2\,$间的坐标关系应为
$$\begin{pmatrix}x_2\\y_2\\z_2\end{pmatrix}=\boldsymbol R\begin{pmatrix}x_1\\y_1\\z_1\end{pmatrix}.$$更一般地,当点$\,P_1\,$绕直线$\,\dfrac {x-x_0}a=\dfrac {y-y_0}b=\dfrac {z-z_0}c\,$($a^2+b^2+c^2=1$)逆时针旋转$\,\theta\,$角后,坐标变为
$$\begin{pmatrix}x_2\\y_2\\z_2\end{pmatrix}=\boldsymbol R\begin{pmatrix}x_1-x_0\\y_1-y_0\\z_1-z_0\end{pmatrix}+\begin{pmatrix}x_0\\y_0\\z_0\end{pmatrix}.$$
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论