在三維幾何變換中,齊次變換矩陣相乘是實現復雜變換的核心方法。本文將通過一個包含四個變換步驟的完整示例,深入探討齊次變換矩陣左乘和右乘的區別,并結合 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θ0?001? ?
當我們用這個矩陣作用于齊次坐標點 [\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θ0?001? ? ?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θ0?sinθcosθ0?001? ?
三維齊次坐標的旋轉變換
在三維齊次坐標系中,一個點可以表示為 [\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} ?1000?0cosθsinθ0?0?sinθcosθ0?0001? ?
旋轉后的點為:
[ 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} ?1000?0cosθsinθ0?0?sinθcosθ0?