(Это все в орто-режиме, начало координат в верхнем левом углу, x положительно вправо, y положительно вниз по оси y)
У меня есть прямоугольник в мировом пространстве, который может иметь вращение m_rotation (в градусах).
Я могу нормально работать с прямоугольником, он вращается, масштабируется, все, что вы могли бы пожелать.
Часть, в которой я действительно запутался, - это вычисление мировых координат прямоугольников из их локальных координат.
Я пытался использовать формулу:
x' = x*cos(t) - y*sin(t)
y' = x*sin(t) + y*cos(t)
where (x, y) are the original points,
(x', y') are the rotated coordinates,
and t is the angle measured in radians
from the x-axis. The rotation is
counter-clockwise as written.
-credits duffymo
Я пытался реализовать формулу так:
//GLfloat Ax = getLocalVertices()[BOTTOM_LEFT].x * cosf(DEG_TO_RAD( m_orientation )) - getLocalVertices()[BOTTOM_LEFT].y * sinf(DEG_TO_RAD( m_orientation ));
//GLfloat Ay = getLocalVertices()[BOTTOM_LEFT].x * sinf(DEG_TO_RAD( m_orientation )) + getLocalVertices()[BOTTOM_LEFT].y * cosf(DEG_TO_RAD( m_orientation ));
//Vector3D BL = Vector3D(Ax,Ay,0);
Я создаю вектор для переведенной точки, сохраняю его в переменной-члене world_vertice прямоугольников. Все в порядке. Однако в моем основном цикле рисования я рисую линию от (0,0,0) до вектора BL, и кажется, что линия идет по кругу от точки на прямоугольнике (нижний левый угол прямоугольника) вокруг начала координат мира.
По существу, когда m_orientation становится больше, он рисует огромный круг вокруг (0,0,0) начала координат мировой системы координат. редактировать: когда m_orientation = 360, он возвращается в 0.
Я чувствую, что делаю эту часть неправильно:
и t - угол, измеренный в радианах
от оси х.
Возможно, я не должен использовать m_orientation (угол поворота прямоугольников) в этой формуле?
Спасибо!
edit: причина, по которой я это делаю, заключается в обнаружении столкновений. Мне нужно знать, где координаты прямоугольников (которые скоро станут твердыми телами) лежат в месте мировых координат для обнаружения столкновений.