计算2D碰撞后的合成速度矢量

时间:2016-01-31 07:15:17

标签: python vector pygame collision-detection separating-axis-theorem

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

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

enter image description here

enter image description here

有人能指出我正确的方向吗?

碰撞后可以提供的所有信息都是最小穿透向量。

编辑:发现一些与此非常相关的在线代码,但我不明白:

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;
}

1 个答案:

答案 0 :(得分:0)

碰撞检测以及如何处理碰撞是两回事。

碰撞后会发生什么,取决于你想要达到的物理类型。

E.g。在你的顶部图片中,让我们假设红色部分是一个不可移动的墙,只有蓝色部分在移动。蓝色片的运动矢量已经在与红色壁的表面平行且垂直的正交部分中分开。在这种情况下处理碰撞的一种简单方法是简单地将速度矢量的分量垂直于墙壁翻转。因此,向量[-4,10]将变为[4,10]。