2012-05-26 109 views

回答

3

現在,忽略翻譯,這是一個比旋轉和縮放稍微棘手的概念。

想想這個的方法是每個矩陣定義基向量的變化。給定一個標準的座標系統,你的基本向量是(1,0,0)(0,1,0)(0,0,1)。就目前而言,隨着概念的貫徹,我將假設一個2D系統,但它的工作量較少。

我也假設列專業。我不記得OpenGL是否真的使用了這個,所以先檢查一下,如果需要的話可以選擇轉置矩陣。

以前定義的基矢量可以矩陣形式表示。這只是將每個向量作爲列中的一個列。因此,爲了從基本矢量變換到基本矢量(即,無變化),我們將使用以下矩陣。這也稱爲「單位矩陣」,因爲它不會對輸入做任何事情(類似於* 1是乘法的標識)。

2D   3D 
(1 0)  (1 0 0) 
(0 1)  (0 1 0) 
      (0 0 1) 

爲了完整起見,我已經包含了3D版本,但這就像我將採取3D。

縮放矩陣可以看作是「拉伸」軸。如果軸的大小是其兩倍,則它們之間的間隔將相距兩倍,因此內容會更大。以此爲實施例

(2 0) 
(0 2) 

這將從(1, 0)(0, 1)基本向量變爲(2, 0)(0, 2),從而使表示兩倍大的整體形狀。圖解,見下文。

Before     After 
6|      3| 
5|       | 
4|      2|-------| 
3|       |  | 
2|--|      1|  | 
1|__|___________   |_______|______ 
0 1 2 3 4 5 6 7   0 1 2 3 

相同,則發生旋轉,雖然相反,我們告不同的值,是用於旋轉矩陣的值如下:

(cos(x) -sin(x)) 
(sin(x) cos(x)) 

繞角度x這將有效地旋轉每個軸線。要真正理解這一點,請刷新你的觸發器,並假設每一列是一個新的基本向量;)。

現在,翻譯有點棘手。爲此,我們在矩陣的末尾添加一個額外的列,對於所有其他操作,最後一行中只有1(即它是表單的標識)。對於翻譯,我們填寫如下:

(1 0 x) 
(0 1 y) 
(0 0 1) 

這是3D形式,但不是您將習慣的形式。您可以將此模型設置爲移動Z座標系座標(並記住,我們正在2D中工作!),假設您的模型存在於​​。這有效地扭曲了形狀,但是,再次,因爲我們在2D中工作,所以它變平了,所以我們沒有理解第三個維度。如果我們在3D在這裏工作,這實際上是第四維,因爲在這裏可以看到:

(1 0 0 x) 
(0 1 0 y) 
(0 0 1 z) 
(0 0 0 1) 

同樣,「第四維」是沒見過,但我們不是沿着它移動和展平。在2D空間中首先圍繞它變得更容易,然後再嘗試和推斷。在3D空間中,這個第四維向量被稱爲w,所以你的模型隱含地位於w=1

希望這會有所幫助!

編輯:順便說一句,這個頁面是幫助我瞭解翻譯矩陣的東西。它有一些體面的圖表,所以希望它會更有幫助: http://www.blancmange.info/notes/maths/vectors/homo/

+0

+1的努力......我希望ASCII藝術旋轉雖然! :) – tmpearce