Обратный грех и преобразование 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)
Другие вопросы по тегам