反转sin和cos变换

时间:2012-12-07 00:32:44

标签: math sin cos

我正在使用基本的罪和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_xdisplay_y以及source_xsource_y是未知数,我该如何解决未知数? 我的联立方程知识有点生疏。

2 个答案:

答案 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)