几何变换
几何变换
概述
XYZ坐标系中的坐标和位移都可以用向量表示,将向量进行平移、缩放、旋转等几何变换操作可以用齐次变换矩阵相乘得到结果,而其反向操作可以用其逆矩阵相乘来实现,多次操作可以通过矩阵相乘来实现。
本文使用情景:以右手坐标系为基准,向量均为列向量,变换时矩阵左乘。
平移
平移向量 \(t=(tx,ty,tz)\)
平移的齐次变换矩阵:
\[T(t)= \left(
\begin{matrix}
1&0&0&tx\\
0&1&0&ty\\
0&0&1&tz\\
0&0&0&1\\
\end{matrix}
\right)
\]
其逆矩阵:
\[T^{-1}(t)=T(-t)= \left(
\begin{matrix}
1&0&0&-tx\\
0&1&0&-ty\\
0&0&1&-tz\\
0&0&0&1\\
\end{matrix}
\right)
\]
缩放
缩放倍率 \(s=(sx,sy,sz)\)
缩放的齐次变换矩阵:
\[S(s)= \left(
\begin{matrix}
sx&0&0&0\\
0&sy&0&0\\
0&0&sz&0\\
0&0&0&1\\
\end{matrix}
\right)
\]
其逆矩阵:
\[S^{-1}(s)=S(1/s)= \left(
\begin{matrix}
1/sx&0&0&0\\
0&1/sy&0&0\\
0&0&1/sz&0\\
0&0&0&1\\
\end{matrix}
\right)
\]
旋转
旋转轴方向 \(r=(n_1,n_2,n_3)\)
旋转角度 \(\theta\)
旋转的齐次变换矩阵:
\[R(r,\theta)= \left(
\begin{matrix}
n_1^2+(1-n_1^2)cosθ&n_1n_2(1-cosθ)-n_3sinθ&n_1n_3(1-caosθ)+n_2sinθ&0\\
n_1n_2(1-cosθ)+n_3sinθ&n_2^2+(1-n_2^2)cosθ&n_2n_3(1-caosθ)-n_1sinθ&0\\
n_1n_3(1-cosθ)-n_2sinθ&n_2n_3(1-caosθ)+n_1sinθ&n_3^2+(1-n_3^2)cosθ&0\\
0&0&0&1\\
\end{matrix}
\right)
\]
其逆矩阵:
\[R^{-1}(r,\theta)=R(r,-\theta)
\]
将X、Y、Z轴的方向向量代入,即可得到特定的齐次变换矩阵。
多个旋转矩阵相乘的技巧:
若一个旋转轴方向会随着另一个旋转轴方向旋转,那么可以先乘其旋转矩阵再乘另一个旋转矩阵。
否则,先乘另一个旋转矩阵再乘这个旋转矩阵。