Эй, ребята, я пытаюсь вычислить вершины вращающегося прямоугольника (2D).Расчет вершин вращающегося прямоугольника
Это достаточно легко, если прямоугольник не был повернут, я решил, что это часть.
Если прямоугольник повернут, я подумал о двух возможных способах вычисления вершин. 1) Посмотрите, как преобразовать вершины из локального пространства/объекта/модели (те, которые я понял ниже) в мировое пространство. Я, честно говоря, понятия не имею, и если это лучший способ, то мне кажется, что я бы многому научился, если бы мог понять это ...
2) Используйте триггер, чтобы как-то выяснить, где конечные точки прямоугольник относительно положения прямоугольника в мировом пространстве. Это было так, как я пытался это сделать до сих пор, я просто не понял, как это сделать.
Вот функция, которая вычисляет вершины до сих пор, спасибо за любую помощь
void Rect::calculateVertices()
{
if(m_orientation == 0) // if no rotation
{
setVertices(
&Vertex((m_position.x - (m_width/2) * m_scaleX), (m_position.y + (m_height/2) * m_scaleY), m_position.z),
&Vertex((m_position.x + (m_width/2) * m_scaleX), (m_position.y + (m_height/2) * m_scaleY), m_position.z),
&Vertex((m_position.x + (m_width/2) * m_scaleX), (m_position.y - (m_height/2) * m_scaleY), m_position.z),
&Vertex((m_position.x - (m_width/2) * m_scaleX), (m_position.y - (m_height/2) * m_scaleY), m_position.z));
}
else
{
// if the rectangle has been rotated..
}
//GLfloat theta = RAD_TO_DEG(atan(((m_width/2) * m_scaleX)/((m_height/2) * m_scaleY)));
//LOG->writeLn(&theta);
}
+1 - Я предпочитаю поворачивать назад, а затем выполнять любую работу, упрощая жизнь. –
Таким образом, вы можете обойтись только при выполнении двух триггерных операций (если вы сохраняете результаты 'cos (t)' и 'sin (t)' перед вычислением любых повернутых вершин). – jnylen
Как эта формула должна вращаться по часовой стрелке? –