我正在使用基本的罪和cos操纵2D地图非常成功,以提供3D视角。
我遇到的问题是我试图找到视口中可见的内容。 反过来有效地进行转换,输出是[0,0]和[宽度,高度],我想知道我的地图上的那些点在哪里。
我已经到了试图扭转的地步:
display_x = (source_x * cos(z)) + (source_y * sin(z))
display_y = (source_y * cos(z)) - (source_x * sin(z))
如果我知道display_x
和display_y
以及source_x
和source_y
是未知数,我该如何解决未知数?
我的联立方程知识有点生疏。
答案 0 :(得分:5)
您正在有效地使用二维旋转矩阵 (我很确定你有一个拼写错误,你在source_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))
答案 1 :(得分: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)