3

目前我有一个迷你物理游戏,它使用分离轴定理进行碰撞检测和响应,但是当我发现没有太多关于使用 SAT 碰撞与另一个形状碰撞后物体的速度会发生什么的文档时,我陷入了停顿检测。

这是我正在谈论的两个图表。

在此处输入图像描述

在此处输入图像描述

谁能指出我正确的方向?

碰撞后能给出的所有信息都是最小穿透向量。

编辑:在网上找到了一些与此非常相关的代码,但我不明白:

void CBody::ProcessCollision(CBody& xBody, const Vector& N, float t)
{
    Vector D = m_xDisplacement - xBody.m_xDisplacement;

    float n  = D * N;

    Vector Dn = N * n;
    Vector Dt = D - Dn;

    if (n > 0.0f) Dn = Vector(0, 0);

    float dt  = Dt * Dt;
    float CoF = s_fFriction;

    if (dt < s_fGlue*s_fGlue) CoF = 1.01f;

    D = -(1.0f + s_fRestitution) * Dn - (CoF) * Dt;

    float m0 =       GetInvMass();
    float m1 = xBody.GetInvMass();
    float m  = m0 + m1;
    float r0 = m0 / m;
    float r1 = m1 / m;

          m_xDisplacement += D * r0;
    xBody.m_xDisplacement -= D * r1;
}
4

1 回答 1

0

碰撞检测和如何处理碰撞是两个不同的事情。

碰撞后会发生什么取决于您要实现的物理类型。

例如,在您的上图中,让我们假设红色部分是一堵不可移​​动的墙,只有蓝色部分在移动。蓝色块的运动矢量已经分裂成平行和垂直于红墙表面的正交部分。在这种情况下,处理碰撞的一种简单方法是简单地翻转垂直于墙壁的速度矢量分量。因此向量 [-4, 10] 将变为 [4,10]。

于 2016-01-31T11:23:14.407 回答