1. 程式人生 > >圖形變換之旋轉變換

圖形變換之旋轉變換

二維旋轉變換

下面是一個簡單的繞原點旋轉變換的圖。 在這裡插入圖片描述

關於圖形變換我們關注的都是怎麼得到變換之後的座標,而對於變換後的座標,很多教材上都只有一個簡略的結果,並不會給出詳細的推導過程。今天學習旋轉變換的時候,對怎麼得出變換後的座標產生了疑惑,花了幾分鐘才想明白,特此記錄一下。

我們不妨設變換前圖形上任意一點的座標為 P(x, y),變換後圖形上對應點座標為 P’(x’ ,y’) 。對於旋轉變換來說,我們不妨設旋轉角度為 θ。我們現在就來推導一下如何得到 x’ 和 y’。(應該還有更好的證法) 由旋轉的性質我們毫無疑問可以得知 OP = OP’ = x2+y2=d\sqrt{x^2 + y^2} = d

POx=α\angle POx = \alpha。我們有 sinα=ydsin\alpha = \dfrac{y}{d} cosα=xdcos\alpha = \dfrac{x}{d}。我們有下面這兩個方程: sin(α+θ)=ydcos(α+θ)=xd sin(\alpha + \theta) = \dfrac{y'}{d} \newline cos(\alpha + \theta) = \space \space \dfrac{x'}{d} 把這兩個方程解出來就可以得到 x’ 和 y’ 的值了(把 sin(a+b),cos(a+b) 拆開算,這裡打方程不方便就不敲出具體拆解過程了): x=xcosθysinθy=xsinθ+ycosθ x' = xcos\theta - ysin\theta \newline y' = xsin\theta + ycos\theta

其座標變換矩陣如下 [cosθsinθ0sinθcosθ0001] \begin{bmatrix} cos\theta & sin\theta & 0 \\ -sin\theta & cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix}

三維旋轉變換

以下都是往逆時針方向旋轉 在這裡插入圖片描述

分別繞三根座標軸旋轉的時候,有一個座標是不變的,然後我們把另外兩個當成二維的算就行,我們可以分別得出對應的座標變換矩陣:

繞 z 軸旋轉

[cosθsinθ00sinθcosθ0000100001] \begin{bmatrix} cos\theta & sin\theta & 0 & 0 \\ -sin\theta & cos\theta & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

繞 x 軸旋轉

[10000cosθsinθ00sinθcosθ00001] \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & cos\theta & sin\theta & 0 \\ 0 & -sin\theta & cos\theta & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

繞 y 軸旋轉

[cosθ0sinθ00100sinθ0cosθ00001] \begin{bmatrix} cos\theta & 0 & -sin\theta & 0 \\ 0 & 1 & 0 & 0 \\ sin\theta & 0 & cos\theta & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

總結

我們不難發現核心部分基本和二維都是差不多的,除了繞 y 軸旋轉的那個 sinθ 的正負號反了。那麼我們有沒有想過為什麼就它是反的呢?一個歪理如下:因為核心部分被分開了 ? 在這裡插入圖片描述 以下結論對初始點在兩軸正方向成立,對旋轉角度也有一定要求:

  • 對於繞 z 軸旋轉,觀察到 x 一直在減小
  • 對於繞 x 軸旋轉,觀察到 y 一直在減小
  • 對於繞 y 軸旋轉,觀察到 z 一直在減小

而座標變換矩陣中,誰減小,負號就在誰的 sinθ 那裡。

  • 二維座標變換補圖