这是一种在旋转(2D)后找到顶点位置的正确方法吗?

时间:2015-12-17 05:22:51

标签: c++ math rotation

所以我正在制作一个小物理引擎,我正在努力让碰撞器与它们的父对象一起旋转,所以我需要知道旋转后顶点所在的位置。不幸的是,我无法想出一种简单的方法来测试它是否真的有效。我可以对碰撞进行一般性测试,但是如果它失败了,我就不会知道这种旋转的东西是真正的原因。所以我在这里要求进行理智检查。

所以这是代码:

void PolygonCollider::SetRotation(float newRot)
{
    float rotDiff = newRot - Collider::GetRotation();
    sf::Vector2f transPos = Collider::GetPosition();

    std::vector<sf::Vector2f>::iterator vert = _verts.begin();

    while(vert != _verts.end())
    {
        sf::Vector2f vertDisp = sf::Vector2f(vert->x - transPos.x, vert->y - transPos.y);   //the displacement vector from the centre of the shape to the vertex
        vertDisp = Rotate(vertDisp, rotDiff);   //rotate the displacement vector.
        vert->x = vertDisp.x + transPos.x;  //x-position of the vertex after rotation
        vert->y = vertDisp.y + transPos.y;  //y-position of the vertex after rotation
    }
}

用语言来说,这就是我正在做的每个顶点:

  1. 找到顶点相对于对象中心的位移。
  2. 旋转位移矢量。
  3. 将新的位移矢量添加到变换位置。
  4. 因此,只要我的Rotate()函数是可靠的,我个人就不会发现为什么这不起作用的原因。

    N.B。正如它在标题中所说,这是2D,在假设旋转仅围绕深度轴的情况下,因此无四元数/ n矩阵处理。

    谢谢。

0 个答案:

没有答案