计算旋转矩形的顶点

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轴以弧度测量的角度.旋转与写入时相反.

我的建议是在纸上做一次.绘制一个矩形,计算新坐标,并重新绘制矩形,以便在编码之前确保它是正确的.然后使用此示例作为单元测试,以确保您正确编码.

  • 通过这种方式,您只需执行2次触发操作(如果在计算任何旋转顶点之前存储"cos(t)"和"sin(t)"的结果). (2认同)