Обратный грех и преобразование cos
Я манипулирую 2D-картой с базовым грехом и потому вполне успешно, чтобы дать трехмерную перспективу.
У меня проблема в том, что я застрял, пытаясь найти то, что видно в окне просмотра. Эффективно выполняя преобразование в обратном порядке, получается результат [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
неизвестны, как я могу решить, что такое неизвестные? Мои знания по уравнениям немного ржавые.
2 ответа
Вы эффективно используете 2-мерную матрицу вращения (я уверен, что у вас есть опечатка, в которой вы меняли 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))
Ваше преобразование - это поворот на угол 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)