三维空间坐标系变换(旋转平移)
在探究三维空间下的变换前,首先研究二位空间,因为比较直观,再推广到三维空间。
首先应该清楚的一点是:旋转、平移对于坐标系下的点
以及坐标系
本身而言都是相对的(运动的相对性)。
例如:
- X O Y XOY XOY坐标系不动,点 P ( x , y ) P(x, y) P(x,y)沿
顺时针
方向旋转 θ \theta θ,得到点 P ′ P' P′,此时点 P ′ P' P′在 X O Y XOY XOY坐标系的坐标为 ( x ′ , y ′ ) (x', y') (x′,y′); - 点 P ( x , y ) P(x, y) P(x,y)不动,坐标轴 X O Y XOY XOY沿着
逆时针
方向旋转 θ \theta θ,得到坐标轴 X ′ O Y ′ X'OY' X′OY′,此时点 P P P在 X ′ O Y ′ X'OY' X′OY′下的坐标为 ( x ′ , y ′ ) (x', y') (x′,y′)。
这两条命题是等价的。
因此,仅讨论坐标系变换。
二维空间下的坐标系变换
平移:
旋转:
注:图片来源https://www.cnblogs.com/meteoric_cry/p/7987548.html
所以对于二维旋转来讲,旋转可描述为:设点 P P P在 X O Y XOY XOY坐标系下坐标为 [ x y ] \begin{bmatrix} x \\ y \end{bmatrix} [xy],将坐标系 X O Y XOY XOY顺时针旋转 θ \theta θ后, P P P点坐标为 [ x ′ y ′ ] \begin{bmatrix} x' \\ y' \end{bmatrix} [x′y′],则有:
[ x ′ y ′ ] = [ c o s θ − s i n θ s i n θ c o s θ ] [ x y ] \begin{bmatrix} x' \\ y' \end{bmatrix} =\begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} [x′y′]=[cosθsinθ−sinθcosθ][xy]
旋转矩阵可记为: Q = [ c o s θ − s i n θ s i n θ c o s θ ] Q = \begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix} Q=[cosθsinθ−sinθcosθ]
三维空间下的坐标系变换
平移:
旋转:
三维空间下,当固定轴选定后,旋转就等价于:其余两轴在其平面内的(二维)旋转。
假设以逆着固定轴正向
的方向看去的顺时针
为旋转的正向
。
-
绕 x x x轴旋转 α \alpha α(在 y z yz yz平面顺时针旋转):
则旋转前后的坐标变化可描述为:
[ x ′ y ′ x ′ 1 ] = [ 1 0 0 0 0 c o s α − s i n α 0 0 s i n α c o s α 0 0 0 0 1 ] [ x y x 1 ] \begin{bmatrix} x' \\ y' \\ x' \\ 1 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & cos\alpha & -sin\alpha & 0 \\ 0 & sin\alpha & cos\alpha & 0 \\ 0 &0 & 0& 1\end{bmatrix} \begin{bmatrix} x \\ y \\ x \\ 1 \end{bmatrix} x′y′x′1 = 10000cosαsinα00−sinαcosα00001 xyx1 -
绕 y y y轴旋转 β \beta β(在 x z xz xz平面顺时针旋转):
则旋转前后的坐标变化可描述为:
[ x ′ y ′ x ′ 1 ] = [ c o s β 0 s i n β 0 0 1 0 0 − s i n β 0 c o s β 0 0 0 0 1 ] [ x y x 1 ] \begin{bmatrix} x' \\ y' \\ x' \\ 1 \end{bmatrix} = \begin{bmatrix} cos\beta & 0 & sin\beta & 0 \\ 0 & 1 & 0 & 0 \\ -sin\beta & 0 & cos\beta & 0 \\ 0 &0 & 0& 1\end{bmatrix} \begin{bmatrix} x \\ y \\ x \\ 1 \end{bmatrix} x′y′x′1 = cosβ0−sinβ00100sinβ0cosβ00001 xyx1 -
绕 z z z轴旋转 γ \gamma γ(在 x y xy xy平面顺时针旋转):
则旋转前后的坐标变化可描述为:
[ x ′ y ′ x ′ 1 ] = [ c o s γ − s i n γ 0 0 s i n γ c o s γ 0 0 0 0 1 0 0 0 0 1 ] [ x y x 1 ] \begin{bmatrix} x' \\ y' \\ x' \\ 1 \end{bmatrix} = \begin{bmatrix} cos\gamma & -sin\gamma & 0 & 0 \\ sin\gamma & cos\gamma & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 &0 & 0& 1\end{bmatrix} \begin{bmatrix} x \\ y \\ x \\ 1 \end{bmatrix} x′y′x′1 = cosγsinγ00−sinγcosγ0000100001 xyx1
综上,当坐标系沿着 X , Y , Z X,Y,Z X,Y,Z轴分别旋转 α , β , γ \alpha,\beta,\gamma α,β,γ后,旋转矩阵为3个沿单一坐标轴旋转的旋转矩阵的乘积,前后的坐标变化可描述为:
Reference:
- 旋转矩阵(Rotation Matrix)的推导及其应用
- Wolfram MathWorld: Rotation Matrix
- 3d变换基础:平移、旋转、缩放(仿射变换)详解——公式推导