2012-12-07 41 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)