Abstract
閱讀此文的基礎是理解“線性”這個概念 -------- 鏈接
首先從字面意思來理解,變換Transfomation是一個操作或一個程序,更徹底地你可以將它理解為一個函式映射(事實上,我們在之后的討論中會盡量往“映射”這個角色靠攏),而這個函式是線性的,
考慮一個二維向量空間的例子 --- 縮放
回顧一下向量這個概念,任何一個向量都能以一組基的線性組合來表示:(默認情形下我們認為它們是標準正交基)
- 基底為\(x\)軸正方向的 \(\bf{v_{1}} = \bf{(1, 0)}\) 、\(y\)軸正方向的 \(\bf{v_{2}} = \bf{(0, 1)}\) ,在這組基下取一個向量 \(\bf{i} = \bf{(3, 2)}\) ,它可由 \(3\bf{v_{1}} + 2\bf{v_{2}}\) 表示,

- 考慮向量 \(\bf{(6, 4)}\) ,它由線性變換 \(\left(\begin{array}{cc}2 & 0\\ 0 & 2\end{array}\right)\left(\begin{array}{c}3\\ 2\end{array}\right)\) 得到,但若換個角度:對于由 \(3\bf{v_{1}} + 2\bf{v_{2}}\) 表示的向量 \(\bf{i}\) ,若表示它的標準基被應用線性映射 \(Trans: V \rightarrow W\)后,變為 \(\bf{w_{1}}\) 、 \(\bf{w_{2}}\),則向量 \(\bf{i}\) 被映射成為由新的一組基 \(\bf{w_{1}}\) 、 \(\bf{w_{2}}\) 構成的向量空間 \(W\) 中的\(\bf{i^{'}}\),且由新的線性組合 \(3\bf{w_{1}}\) + 2\(\bf{w_{2}}\) 表示,

考慮另一個二維向量空間的例子 --- 旋轉
這一次我們關注非單獨點進行線性變換的情形:

-
左邊是一個由一對基 \(\bf{v_{1}} = \bf{(a, b)}\) 、\(\bf{v_{2}} = \bf{(c, d)}\) 構建的向量空間\(V\),這對基底相對于標準正交基逆時針旋轉了\(\theta\),并構成了一個正方形,
-
現在將這對基繼續往逆時針方向旋轉\(\alpha\)角度,變為\(\bf{w_{1}} = \bf{(a', b')}\) 、\(\bf{w_{2}} = \bf{(c', d')}\),可以看到,正方形上的所有點被一個線性映射投影到了另一個向量空間\(W\),視覺上的效果便是其繞原點也旋轉了\(\alpha\)角度,
-
現在通過這組前后變換的基來計算這個線性映射:
設基底一個分量的模為\(r\)(即旋轉半徑),易知:
\( \begin{equation} \begin{aligned} \tt{a^{'}} &= \tt{\tt{r \cdot cos(\theta + \alpha)}} \\ &= \tt{r \cdot (cos\theta \cdot cos\alpha - sin\theta \cdot sin\alpha)} \\ &= \tt{(r \cdot cos\theta) \cdot cos\alpha - (r \cdot sin\theta) \cdot sin\alpha} \\ &= \tt{a \cdot cos\alpha - b \cdot sin\alpha} \end{aligned} \end{equation} \)
\( \begin{equation} \begin{aligned} \tt{b^{'}} &= \tt{\tt{r \cdot sin(\theta + \alpha)}} \\ &= \tt{r \cdot (sin\theta \cdot cos\alpha + cos\theta \cdot sin\alpha)} \\ &= \tt{(r \cdot cos\theta) \cdot sin\alpha + (r \cdot sin\theta) \cdot cos\alpha} \\ &= \tt{a \cdot sin\alpha + b \cdot cos\alpha} \end{aligned} \end{equation} \)
也即:\(\left(\begin{array}{c}a^{'}\\ b^{'}\end{array}\right) = \left(\begin{array}{cc}cos\alpha & -sin\alpha\\ sin\alpha & cos\alpha\end{array}\right)\left(\begin{array}{c}a\\ b\end{array}\right)\)
注意事項
- 在討論旋轉時,我們規定必須繞原點進行旋轉;繞非原點旋轉的變換不是線性變換,因為其不滿足線性的其次性,且這種情況稱為仿射變換
考慮一個二維向量空間的綜合例子 --- 旋轉 + 縮放
現在考慮將原向量空間的一個基單獨進行旋轉,然后再對新向量空間中的一組基進行縮放(假設縮放倍數為\(n\)),以讓我們的例子看起來不是那么單調:

由于我們僅對基\(v2\)進行了旋轉,結合我們之前得出的結論,可輕易得到這樣的等式:
\(\left(\begin{array}{cc}z_1 \\ z_2\end{array}\right) = \left(\begin{array}{cc}1 & 0\\ sin\theta & cos\theta\end{array}\right)\left(\begin{array}{cc}n & 0\\ 0 & n\end{array}\right)\left(\begin{array}{cc}v1 \\ v2\end{array}\right)\)
考慮一個特殊例子 --- 三維坐標系坐標空間轉換
目標
將某三維坐標空間中的點集轉換到另一個坐標空間中,
需提前了解的細節
考慮一個坐標系,由原點 \(\bf{e}\) 以及一組基 \(\bf{uvw}\) 構成,則坐標 \((\tt{u,v,w})\) 描述一個點
\(\bf{e}+\tt{u}\bf{u}+\tt{v}\bf{v}+\tt{w}\bf{w}\)
思考一下,為什么這里要加上原點e?因為在這里我們表示的是點,點需要考慮位置,而向量只需考慮方向,
在計算機中,這樣的坐標系并不是憑空被存盤表示的,一般來說,我們會規定一個標準的正規坐標系作為參考系(也即所謂的全域global / 世界world坐標系),之后便可以用該參考系來表示其它類似于上述 \(\bf{uvw}\) 的坐標系,
坐標空間變換
在三維空間中,我們習慣定義一個 \(\bf{xyz}\) 標準正交基為參考系,且通常原點與基向量的坐標分別為:
-
\(\bf{o} = \tt{(0, 0, 0)}\)
-
\(\bf{x} = \tt{(1, 0, 0)}\)
-
\(\bf{y} = \tt{(0, 1, 0)}\)
-
\(\bf{z} = \tt{(0, 0, 1)}\)

假設圖中左邊的便是 \(\bf{xyz}\) 參考系,觀察右上角的坐標系,由原點 \(\bf{e}\) 以及一組標準正交基 \(\bf{uvw}\) 組成,
有一點 \(\tt{P}\) 在 \(\bf{uvw}\) 下的坐標為 \(\tt{(u_p,v_p,w_p)}\),則在 \(\bf{uvw}\) 系中 \(\tt{P}\) 可表示為線性組合:
\(\tt{P}_{uvw} = \bf{e} + \tt{u_p}\bf{u} + \tt{v_p}\bf{v} + \tt{w_p}\bf{w}\ \ \ (1)\)
我們已經知道,\(\bf{uvw}\) 系的原點與基向量本身是由參考系 \(\bf{xyz}\) 表示的,也即:
-
\(\bf{e} = \tt{(x_e, y_e, z_e)}\)
-
\(\bf{u} = \tt{(x_u, y_u, z_u)}\)
-
\(\bf{v} = \tt{(x_v, y_v, z_v)}\)
-
\(\bf{w} = \tt{(x_w, y_w, z_w)}\)
則 \((1)\) 式可化為:
\( \begin{equation} \begin{aligned} \tt{P}_{xyz} &= \tt{(x_e, y_e, z_e) + u_p(x_u, y_u, z_u) + v_p(x_v, y_v, z_v) + w_p(x_w, y_w, z_w)} \\ &= \tt{ (x_e+u_{p}x_{u}+v_{p}x_{v}+w_{p}x_{w})+(y_e+u_{p}y_{u}+v_{p}y_{v}+w_{p}y_{w})+(z_e+u_{p}z_{u}+v_{p}z_{v}+w_{p}z_{w}) } \end{aligned} \end{equation} \)
有了這些資訊,我們已知 \(\tt{P}\) 在 \(\bf{uvw}\) 下的坐標表示,要求其被轉換到參考系 \(\bf{xyz}\) 后坐標 \(\tt{(x_p,y_p,z_p)}\) 的具體值,可用矩陣方程來表示:
\(\left[\begin{array}{c}x_p \\ y_p \\ z_p \\ 1\end{array}\right] = \left[\begin{array}{cccc}x_u & x_v & x_w & 0\\ y_u & y_v & y_w & 0 \\ z_u & z_v & z_w & 0 \\ 0 & 0 & 0 & 1\end{array}\right]\left[\begin{array}{cccc}1 & 0 & 0 & x_e\\ 0 & 1 & 0 & y_e \\ 0 & 0 & 1 & z_e \\ 0 & 0 & 0 & 1\end{array}\right]\left[\begin{array}{c}u_p \\ v_p \\w_p \\ 1\end{array}\right]\)
寫得更簡單點便是:
\(\tt{P}_{xyz} = \left[\begin{array}{cccc}u & v & w & e\\ 0 & 0 & 0 & 1\end{array}\right]\tt{P}_{uvw}\)
我們討論的是將點集從某個標準正交基 \(\bf{uvw}\) 轉換到 參考系 \(\bf{xyz}\),如果想做一個逆操作:將點集從參考系轉換到 \(\bf{uvw}\),只需將此變換矩陣求逆即可:
\(\tt{P}_{uvw} = \left[\begin{array}{cccc}u & v & w & e\\ 0 & 0 & 0 & 1\end{array}\right]^{-1}\tt{P}_{xyz}\)
由于我們規定 \(\bf{uvw}\) 為正交基,由定義知,正交矩陣的轉置即為它的逆,所以上式可變為:
\(\left[\begin{array}{c}u_p \\ v_p \\ w_p \\ 1\end{array}\right] = \left[\begin{array}{cccc}x_u & x_v & x_w & 0\\ y_u & y_v & y_w & 0 \\ z_u & z_v & z_w & 0 \\ 0 & 0 & 0 & 1\end{array}\right]^\mathrm{T}\left[\begin{array}{cccc}1 & 0 & 0 & x_e\\ 0 & 1 & 0 & y_e \\ 0 & 0 & 1 & z_e \\ 0 & 0 & 0 & 1\end{array}\right]^\mathrm{-1}\left[\begin{array}{c}x_p \\ y_p \\z_p \\ 1\end{array}\right]\)
也即:
\(\left[\begin{array}{c}u_p \\ v_p \\ w_p \\ 1\end{array}\right] = \left[\begin{array}{cccc}x_u & y_u & z_u & 0\\ x_v & y_v & z_v & 0 \\ x_w & y_w & z_w & 0 \\ 0 & 0 & 0 & 1\end{array}\right]\left[\begin{array}{cccc}1 & 0 & 0 & -x_e\\ 0 & 1 & 0 & -y_e \\ 0 & 0 & 1 & -z_e \\ 0 & 0 & 0 & 1\end{array}\right]\left[\begin{array}{c}x_p \\ y_p \\z_p \\ 1\end{array}\right]\)
你可能會疑惑,將點集從標準系轉換到 \(\bf{uvw}\) 用得著這么復雜嗎,我用這個變換矩陣不就行了嗎:
\(\tt{P}_{uvw} = \left[\begin{array}{cccc}x & y & z & o\\ 0 & 0 & 0 & 1\end{array}\right]\tt{P}_{xyz}\)
回答:是可以,前提是你要額外計算 \(\bf{xyz}\) 基向量在 \(\bf{uvw}\) 中的坐標表示,正如我們推導的上述一系列公式,都是基于 "\(\bf{uvw}\) 系的原點與基向量本身是由參考系 \(\bf{xyz}\) 表示的" 這個大前提,所以還是乖乖求個逆操作吧,也沒那么難,
如有不嚴謹的地方歡迎指出 ??
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/283017.html
標籤:其他
上一篇:關于企業虛擬化求助
下一篇:我是個怎樣的人
