2014-11-05 47 views
0

我不知道這是否是正確的地方問或不,因爲我想問的可能是基本原則(及其實施)而不是代碼特定的。我提前道歉。如何基於起源/世界空間與均勻矩陣的翻譯

目前,我試圖讓使用SDL & C++我自己的2D引擎用我有限的知識和生鏽的線性代數。我目前被困在轉換部分。我編寫了自己的向量和矩陣類(Vector2,Vector3,Matrix2x2,Matrix3x3)。並將Matrix3x3派生成一個Transform類來保存場景中對象的變換。所以,爲了得到位置,它來自這些x =元素[0] [2],y =元素[1] [2],而角度是從atan(元素[1] [0],元素[0] [ 0])。

現在假設我有此變換爲對象:

| 0.86602540378   -0.5   50 | 
|  0.5  0.86602540378  -70 | 
|  0     0    1 | 

或者位置= 50,-70;旋轉= 30度。

現在,如果我有一個平移矩陣:

| 1  0  40 | 
| 0  1  20 | 
| 0  0   1 | 

如何翻譯不是根據其旋轉的相對空間,但基於對世界/全球空間中的對象?因此,對象的最終變換將如下所示:

| 0.86602540378   -0.5   90 | 
|  0.5  0.86602540378  -50 | 
|  0     0    1 | 

在此先感謝。

回答

0

在這種情況下,嘗試應用左乘法。正如你可能知道的那樣,矩陣乘法一般是不可交換的。 AB與BA不一樣。如果你乘以左邊的平移矩陣,右邊的對象變換,你很可能會得到它。

+0

如果是這種情況,那麼翻譯矩陣將是我的對象的變換,而我的對象的變換將是翻譯matix,這不是我想要做的。我相信正確的方法應該是將旋轉矩陣乘以其逆(或轉置?我忘了),然後將其與我的平移矩陣相乘,並將其乘以旋轉矩陣。但是現在我以自己添加翻譯價值的方式解決了這個問題。 :P 無論如何,我想我會關閉這個問題,因爲我已經「稍微」解決了它。 Unelegantly。 :P – 2014-11-07 01:36:02

+1

好吧,經過一段時間,你是絕對正確的。與左邊的變化相乘確實導致了全球變革。這是全局轉換對象的常用方法。我的(缺乏)矢量和矩陣知識在這一個中失敗了。謝謝。 – 2014-11-17 03:49:43