Math 反转正反变换

Math 反转正反变换,math,trigonometry,Math,Trigonometry,我正在用基本的正反方向操作一个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_x

我正在用基本的正反方向操作一个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_x和display_y以及source_x和source_y是未知数,我如何解决未知数是什么?
我的联立方程知识有些生疏。

你的变换是按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)

变换是按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)

您可以有效地使用二维旋转矩阵 我很确定你有一个打字错误,在显示y的定义中,你把源x换成了源y

你所需要做的就是反转这个矩阵,发现它的转置在对角线上翻转,因为它保证是正交的

因此,它应该是:

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

您可以有效地使用二维旋转矩阵 我很确定你有一个打字错误,在显示y的定义中,你把源x换成了源y

你所需要做的就是反转这个矩阵,发现它的转置在对角线上翻转,因为它保证是正交的

因此,它应该是:

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

非常感谢。我注意到你在回复中复制了相同的打字错误我想我刚刚交换了顺序-source_x在那里:有趣的是Thomas Andrew的回答也是正确的,因为cosz==cos-z,所以实际上你只是移动了sinzPerfect的符号谢谢。我注意到你在回复中复制了相同的打字错误我想我刚刚交换了顺序-source_x在那里:有趣的是,Thomas Andrew的回答也是正确的,因为cosz==cos-z,所以实际上你只是在移动sinz的符号