Ben*_*son 6 c++ math trigonometry matrix rectangles
嘿伙计们,我正在尝试计算旋转矩形的顶点(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);
}
Run Code Online (Sandbox Code Playgroud)
duf*_*ymo 17
我只想转换每个点,对每个点应用相同的旋转矩阵.如果它是2D平面旋转,它将如下所示:
x' = x*cos(t) - y*sin(t)
y' = x*sin(t) + y*cos(t)
Run Code Online (Sandbox Code Playgroud)
其中(x,y)是原始点,(x',y')是旋转坐标,t是从x轴以弧度测量的角度.旋转与写入时相反.
我的建议是在纸上做一次.绘制一个矩形,计算新坐标,并重新绘制矩形,以便在编码之前确保它是正确的.然后使用此示例作为单元测试,以确保您正确编码.