Think about a matrix multiplication as a transformation of space.atom
對 Rn中的每一個向量x,T(x)由Ax計算獲得,其中A是m×n 矩陣,將這樣一個矩陣變換記爲x→Ax。spa
顯然T的值域爲A的列向量的全部線性組合的集合。.net
線性無關:線程
一組向量中的任何一個向量都很「獨立」,不能用這組向量中除他以外的任何其餘向量的任何線性組合來表示。orm
線性相關:xml
一組向量中只有部分向量是「獨立」的,他們表明了整個向量組的維度(秩),由於組內的任何其餘向量均可以由這些獨立的向量的某種線性組合來表示。blog
線性組合:ip
若是向量b能夠表示爲一組向量a1,a2,a3,...,an的係數乘和,即b=x1∗a1+x2∗a2+x3∗a3+...+xn∗an,則稱b向量是向量組a1,a2,a3,...,an的一個線性組合。ci
線性變換是線性代數中最重要的一類變換。get
定義:
變換(或映射)T稱爲線性變換的,若:
- 對定義域內的一切u,v,T(u+v)=T(u)+T(v)。
- 對定義域內的一切u; 和任何標量c,T(cu)=cT(u)。
能夠證實,每個矩陣變換都是線性變換,反正則不成立。
知道矩陣變換是線性變換有什麼好處呢?可以簡化向量轉換的計算過程嗎?可以方便咱們理解向量變換嗎?
看下面的例子:
二維向量空間的單位正交基能夠用單位矩陣I=[1001]=(e1,e2)表示,設T是一個R2→R3的矩陣變換,有:
T(e1)=⎡⎣⎢⎢5−72⎤⎦⎥⎥ ,T(e1)=⎡⎣⎢⎢−380⎤⎦⎥⎥
求R2中的任意一個向量x=[x1x2]被T變換後的向量。
解:
二維向量空間R2中的任何一個向量都是基向量e1,e2的某個線性組合:
x=[x1x2]=x1e1+x2e2
由於咱們知道矩陣變換是線性變換,由線性變換咱們能夠得出:
T(x)=T(x1e1+x2e2)=T(x1e1)+T(x2e2)=x1T(e1)+x2T(e2)=[T(e1)T(e2)][x1x2]。
T(e1),T(e2)已知,因此結果就很容易得出了。
能夠看到,對任何向量x進行線性變換T的結果向量,是一個對基向量組進行線性變換T以後的新向量組的一個線性組合,係數沒變。看下面的圖示,一目瞭然:
上圖是某個線性變換以前,黃色向量與綠色基向量和紅色基向量之間的關係。
能夠看到,線性變換以後,平行關係保持,原點位置不變。
正如前面所說,變換以後,新的v向量是變換以後的新的基向量的線性組合,組合係數沒有改變。
這個性質給了咱們能力:
只須要知道兩個基向量(i向量和j向量)轉換以後的的結果,而不用知道轉換自己,咱們就能推導出二維空間中全部向量轉換以後的結果。
OpenGL中常常會使用的平移矩陣、縮放矩陣以及旋轉矩陣。其實前兩種矩陣很好理解,引入齊次座標系很是直觀地就能寫出一個平移矩陣(固然平移變換不是線性變換),對單位矩陣的對角線上的值進行設置就能很是直觀地表示沿着對應座標軸的縮放。然而,沿着某個座標軸旋轉的旋轉矩陣卻不怎麼直觀,不像前兩種矩陣這麼好理解。不過,有了矩陣變換是一個線性變換的知識,咱們其實能夠比較直觀的表示一個沿座標軸旋轉的旋轉矩陣。
對於不是沿座標軸旋轉的變換,均可以經過座標系變換,轉換成沿「座標軸旋轉」。旋轉以後,再變換回原座標系。
從上面的例子,咱們得出結論:
只要知道矩陣變換T做用於基向量組的結果,咱們就能用一個矩陣來表示這個矩陣變換。
設T(m)是一個將三維向量m=⎡⎣⎢⎢xyz⎤⎦⎥⎥沿x軸順時針旋轉θ度的變換T(m)=Am,求這個變換矩陣A。
T(m)=T(xe1+ye2+ze3)=T(xe1)+T(ye2)+T(ze3)=xT(e1)+yT(e2)+zT(e3)=[T(e1)T(e2)T(e3)]⎡⎣⎢⎢xyz⎤⎦⎥⎥
因此,A=[T(e1)T(e2)T(e3)], 對基向量進行變換,很直觀的就能獲得這個旋轉矩陣:
A=⎡⎣⎢⎢1000cosθ−sinθ0sinθcosθ⎤⎦⎥⎥
齊次座標形式爲:
A=⎡⎣⎢⎢⎢⎢10000cosθ−sinθ00sinθcosθ00001⎤⎦⎥⎥⎥⎥
同理能夠很容易的推出沿其餘軸旋轉的旋轉矩陣。
「Mathematics is the art of giving the same name to different things.」 -Henri Poincare
咱們說一個三維空間中的點P的座標是(x,y,z),意味着,向量OP=x∗i⃗+y∗j⃗+z∗z⃗,其中,i⃗,j⃗,z⃗是P當前座標系的基向量。若是i⃗=(1,0,0),j⃗=(0,1,0),z⃗=(0,0,1),那麼,座標是(x,y,z)是點P在標準世界座標系中的一個座標。
實際上,i⃗,j⃗,z⃗ 不必定非得是前面所說的標準單位正交基,三維空間中的基向量組能夠由任何不共線且不共面的(線性無關)三個向量組成,這樣任意的i⃗,j⃗,z⃗組成的座標系和標準世界座標系共原點,不一樣的地方就是座標軸的夾角(方向)和單位長度發生了改變。
對於這樣推廣以後的座標系統,前面提到的性質保持,即:
只要知道矩陣變換T做用於基向量組的結果,咱們就能用一個矩陣來表示這個矩陣變換。
直觀上說,矩陣變換會切換座標系,可是不會改變座標。矩陣變換的結果是一個位於標準世界座標系中的向量,或者點。明白這點很重要,尤爲在座標系變換中:
⎡⎣⎢⎢x′y′z′⎤⎦⎥⎥ = A⎡⎣⎢⎢xyz⎤⎦⎥⎥ ⇒ ⎡⎣⎢⎢xyz⎤⎦⎥⎥ = A−1⎡⎣⎢⎢x′y′z′⎤⎦⎥⎥
固然,若是你明白個人意思:座標是相對於座標系的。
例如,原來的座標系Ori的基向量組是a⃗,b⃗,c⃗,點P在Ori中的座標爲(x,y,z),或者,O爲座標原點,你能夠說向量OP=x∗a⃗+y∗b⃗+z∗c⃗。 Ori的基向量通過線性變換T以後變成了r⃗,s⃗,t⃗,那麼點P轉換以後的點P′在以r⃗,s⃗,t⃗爲基向量組的座標系Trans中的座標仍然是(x,y,z),或者,你能夠說向量 OP′=x∗r⃗+y∗s⃗+z∗t⃗。
進一步地,咱們能夠認爲,連續做用地線性變換的組合的效果就是:
座標系數不變,連續地切換座標系。
我特地強調「座標系數不變」是由於:
相對於標準世界座標系,這些變化確實在不斷地改變一個點的座標。可是,相對於變換過程當中的的各個座標系,若是座標點在變換以前的座標系中的座標是(x,y,z),那麼,在變換以後的座標系中,該點的座標仍然是(x,y,z)。
因此,這裏的重點是:
說到一個點的座標時,永遠伴隨着一個特定的座標系。
因此下次你看到一個矩陣A時,固然不包括齊次座標系下的平移矩陣,你能夠把它當作一個線程變換T。 A的每一列x都是一個標準單位正交基向量ex通過T變換以後的結果,任何一個向量v,通過T變換以後的結果爲Av。