【基於VP的消失點標註】線性代數與仿射變換

一. 仿射變換的定義和種類

仿射變換,affine transform。主要由線性變換和平移變換兩部分組成。

平移變換比較好理解,那麼什麼是線性變換呢?下面給出線性變換的幾個特徵

  1. 變換之前是直線的,變換之後依然是直線
  2. 變換前後比例不會變。也就是說,一開始某個點是線段的中點,在變換之後,依然還是重點。

旋轉變換就是一個非常重要的線性變換,大家請思考:一條線段經過旋轉之後,是不是仍然是一條線段?一條線段上的中點,在旋轉之後是不是還是中點?

類似旋轉變換這類的線性變換還有很多,總的來說,仿射變換可以分爲下面幾類:

平移,翻轉,旋轉,縮放,剪切。

二. 平移

平移的實現比較簡單,只要在原來向量的基礎上再加上一個平移向量就可以了:

\vec y = \vec x + \vec b

還有另外一種更爲推薦的實現也可以進行平移變換,那就是捨棄向量的加法,改用矩陣乘法

這樣做的好處是,能夠把所有affine transformation都統一成\vec y = A \vec x的形式

對於2D的座標(x, y)而言,我們首先要把他擴展到齊次座標系下,再進行矩陣的乘法運算(其它座標也是如此)。

\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} 1 & 0 & \bigtriangleup x \\ 0 & 1 & \bigtriangleup y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}

這個變換矩陣可以利用分塊矩陣的思想來看待,他引入了額外的維度和平移向量

\begin{bmatrix} 1 & 0 & \bigtriangleup x \\ 0 & 1 & \bigtriangleup y \\ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix}\bold I & \bold T \\ \bold 0 & 1 \end{bmatrix}

三. 翻轉

flip說直白一點就是對稱操作,比如之前展示的那個R型圖中,實際上就是所有點做了一個關於y軸的對稱

關於翻轉這一點,有一個非常簡單的原則,那就是按照哪個軸翻轉,哪個座標就不變

還是以2D座標爲例,像之前繞y軸翻轉,那麼縱座標就不變。(3D的也是同一個道理,比如按照xoy平面翻轉,那x y值都不用變)

\begin{bmatrix}x' \\ y' \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ 0 \ & -1\end{bmatrix} \begin{bmatrix}x \\ y \end{bmatrix}

這個變換矩陣也是比較簡單,就是在單位矩陣的基礎上,對某些角元做一個相反數就行了

四. 旋轉

關於旋轉矩陣的介紹實在是太多了,這裏不介紹了,直接給出結果:

(1). 如果是2D座標系的話,其逆時針轉動的旋轉矩陣如下所示:

\begin{bmatrix} cos(\theta) & -sin(\theta) \\ sin(\theta) & cos(\theta)\end{bmatrix}

(2). 如果是3D座標系的話,其旋轉矩陣如下所示:

  1. 繞x軸旋轉,方向是yz平面順時針(與右手螺旋方向相反)\begin{bmatrix} 1 & 0 & 0 \\ 0 & cos(\theta) & -sin(\theta) \\ 0 & sin(\theta) & cos(\theta) \end{bmatrix}
  2. 繞y軸旋轉,方向是zx平面順時針(與右手螺旋方向相反)\begin{bmatrix} cos(\theta) & 0 & sin(\theta) \\ 0 & 1 & 0 \\ -sin(\theta) & 0& cos(\theta) \end{bmatrix}
  3. 繞z軸尋轉,方向是xy平面順時針(與右手螺旋方向相反)\begin{bmatrix} cos(\theta) & -sin(\theta) & 0 \\ sin(\theta) & cos(\theta) &0 \\ 0 & 0 & 1 \end{bmatrix}

記憶方法:其實3D的旋轉矩陣就是2D的一個擴展。3D不同的矩陣其實就是行和列的一個互換。

五. 縮放

縮放更加簡單了,就是在單位矩陣對角元上把1改成其它正數。

比如我想要吧x的座標軸放大兩倍,我就可以用以下矩陣:

\begin{bmatrix} 2 & 0 \\ 0 & 1 \end{bmatrix}

其它的就不說了,比較簡單。

六. 剪切

剪切的主要目的就是將一個標準的長方體轉換成平行四面體。

在形式上也比較簡單,以2D的爲例,如果是要x座標做橫向剪切:

\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} 1 & c \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章