所以我正在制作一个小物理引擎,我正在努力让碰撞器与它们的父对象一起旋转,所以我需要知道旋转后顶点所在的位置。不幸的是,我无法想出一种简单的方法来测试它是否真的有效。我可以对碰撞进行一般性测试,但是如果它失败了,我就不会知道这种旋转的东西是真正的原因。所以我在这里要求进行理智检查。
所以这是代码:
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
}
}
用语言来说,这就是我正在做的每个顶点:
因此,只要我的Rotate()函数是可靠的,我个人就不会发现为什么这不起作用的原因。
N.B。正如它在标题中所说,这是2D,在假设旋转仅围绕深度轴的情况下,因此无四元数/ n矩阵处理。
谢谢。