1

我正在非常成功地操作具有基本 sin 和 cos 的 2D 地图以提供 3d 透视图。

我遇到的问题是我一直试图找到视口中可见的内容。有效地进行反向转换,输出为 [0,0] 和 [width,height],我想知道这些点在我的地图上的位置。

我已经到了试图扭转的地步:

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

如果我知道display_xanddisplay_ysource_xandsource_y是未知数,我如何解决未知数是什么?我的联立方程知识有点生疏。

4

2 回答 2

5

您正在有效地使用 2d 旋转矩阵(我很确定您在 display_y 的定义中将 source_x 替换为 source_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))
于 2012-12-07T00:43:47.103 回答
2

你的变换是旋转角度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)
于 2012-12-07T00:42:22.310 回答