嘿,我试图计算旋转矩形(2D)的顶点。计算旋转矩形的顶点
如果矩形没有旋转,我很容易,我想这一部分了。
如果矩形已经旋转,我想到两种可能的方法来计算顶点。 1)找出如何将顶点从本地/对象/模型空间(我下面想到的)转换到世界空间。我真的没有线索,如果这是最好的方式,那么我觉得我会从中学到很多东西,如果我能想出来......
2)使用trig来弄清楚哪里的端点矩形相对于世界空间中矩形的位置。这一直是我一直在努力的方式,直到现在我还没有想出如何。
下面是计算顶点迄今为止功能,感谢您的帮助
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 - 我倾向于旋转回来,然后做任何工作,使生活更简单。 – 2009-09-24 00:45:43
通过这种方式,您只需执行2个触发操作(如果在计算任何旋转的顶点之前存储'cos(t)'和'sin(t)'的结果)。 – jnylen 2009-09-24 01:55:41
这个公式将如何顺时针旋转? – 2012-09-06 19:35:38