齐次变换矩阵相乘的复合变换:左乘与右乘的深度解析
在三维几何变换中,齐次变换矩阵相乘是实现复杂变换的核心方法。本文将通过一个包含四个变换步骤的完整示例,深入探讨齐次变换矩阵左乘和右乘的区别,并结合 Python sympy
库的代码实现,详细阐述变换过程和结果差异。
二维齐次坐标的旋转变换
在二维齐次坐标系中,一个点可以表示为 [\begin{bmatrix}x\ y\ 1\end{bmatrix}]。为了实现旋转变换,可以使用扩展后的旋转矩阵。假设绕原点逆时针旋转 θ 角度,旋转矩阵为:
[ cos θ − sin θ 0 sin θ cos θ 0 0 0 1 ] \begin{bmatrix}\cosθ & -\sinθ & 0 \\ \sinθ & \cosθ & 0 \\ 0 & 0 & 1\end{bmatrix} cosθsinθ0−sinθcosθ0001
当我们用这个矩阵作用于齐次坐标点 [\begin{bmatrix}x\ y\ 1\end{bmatrix}] 时,可以得到旋转后的点:
[ cos θ − sin θ 0 sin θ cos θ 0 0 0 1 ] [ x y 1 ] = [ x cos θ − y sin θ x sin θ + y cos θ 1 ] \begin{bmatrix}\cosθ & -\sinθ & 0 \\ \sinθ & \cosθ & 0 \\ 0 & 0 & 1\end{bmatrix}\begin{bmatrix}x\\ y\\ 1\end{bmatrix} = \begin{bmatrix}x\cosθ - y\sinθ\\ x\sinθ + y\cosθ\\ 1\end{bmatrix} cosθsinθ0−sinθcosθ0001 xy1 = xcosθ−ysinθxsinθ+ycosθ1
如果是顺时针旋转 θ 角度,只需要将 θ 替换为 -θ,得到的旋转矩阵为:
[ cos θ sin θ 0 − sin θ cos θ 0 0 0 1 ] \begin{bmatrix}\cosθ & \sinθ & 0 \\ -\sinθ & \cosθ & 0 \\ 0 & 0 & 1\end{bmatrix} cosθ−sinθ0sinθcosθ0001
三维齐次坐标的旋转变换
在三维齐次坐标系中,一个点可以表示为 [\begin{bmatrix}x\ y\ z\ 1\end{bmatrix}]。对于绕不同轴的旋转:
绕 x 轴旋转(逆时针方向)
旋转矩阵为:
[ 1 0 0 0 0 cos θ − sin θ 0 0 sin θ cos θ 0 0 0 0 1 ] \begin{bmatrix}1 & 0 & 0 & 0 \\ 0 & \cosθ & -\sinθ & 0 \\ 0 & \sinθ & \cosθ & 0 \\ 0 & 0 & 0 & 1\end{bmatrix} 10000cosθsinθ00−sinθcosθ00001
旋转后的点为:
[ 1 0 0 0 0 cos θ − sin θ 0 0 sin θ cos θ 0 0 0 0 1 ] [ x y z 1 ] = [ x y cos θ − z sin θ y sin θ + z cos θ 1 ] \begin{bmatrix}1 & 0 & 0 & 0 \\ 0 & \cosθ & -\sinθ & 0 \\ 0 & \sinθ & \cosθ & 0 \\ 0 & 0 & 0 & 1\end{bmatrix}\begin{bmatrix}x\\ y\\ z\\ 1\end{bmatrix} = \begin{bmatrix}x\\ y\cosθ - z\sinθ\\ y\sinθ + z\cosθ\\ 1\end{bmatrix} 10000cosθsinθ00−sinθcosθ0