2012-12-07 32 views
1

我操縱的基本罪與cos的2D地圖相當成功地給出了3D視角。顛倒罪與cos變換

我遇到的問題是我試圖找到在視口中可見的內容。 有效地做反向變換,輸出爲[0,0]和[寬度,高度],我想知道這些點在我的地圖上的位置。

我它得到的試圖扭轉這一點:

display_x = (source_x * cos(z)) + (source_y * sin(z)) 
display_y = (source_y * cos(z)) - (source_x * sin(z)) 

如果我知道display_xdisplay_ysource_xsource_y都是未知數,我怎麼能解決未知是什麼? 我的聯立方程知識有點生疏。

回答

5

你有效地使用二維旋轉矩陣 (我敢肯定,你有,你的定義交換source_x爲source_y一個錯字display_y

http://en.wikipedia.org/wiki/Rotation_matrix

[ cos(z), sin(z) ] [ source_x ] = [ display_x ] 
[-sin(z), cos(z) ] [ source_y ] [ display_y ] 

的)一你需要做的反轉這個矩陣是發現它的轉置(翻轉對角線),因爲它保證是正交的。

所以它應該是:

display_x = (source_x * cos(z)) - (source_y * sin(z)) 
display_y = (source_x * sin(z)) + (source_y * cos(z)) 
+0

完美的感謝。我注意到您在回覆中複製了相同的錯字。 :) – Nick

+0

我想我只是交換了順序 - source_x在那裏:)有趣的是,托馬斯安德魯的迴應也是正確的,因爲cos(z)== cos(-z)所以你真的只是移動罪惡的標誌(z ) – Cholesky

1

您的轉換是按角度z旋轉,所以您需要通過旋轉角度-z來反轉。這產生了:

source_x = (display_x * cos(z)) - (display_y * sin(z)) 
source_y = (display_x * cos(z)) + (display_y * sin(z)) 

這將使用:

cos(z) == cos(-z) 
sin(-z) == -sin(z)