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

Python 计算2D碰撞后的合成速度矢量,python,vector,pygame,collision-detection,separating-axis-theorem,Python,Vector,Pygame,Collision Detection,Separating Axis Theorem,目前,我有一个小型物理游戏,它使用分离轴定理进行碰撞检测和响应,但是当我发现没有太多关于物体与另一个形状碰撞(使用SAT碰撞检测)后的速度变化的文档时,我停了下来 这是我所说的两张图表 谁能给我指个正确的方向吗 碰撞后可以给出的所有信息都是最小穿透向量 编辑:在网上找到一些与此非常相关的代码,但我不理解: void CBody::ProcessCollision(CBody& xBody, const Vector& N, float t) { Vector D =

目前,我有一个小型物理游戏,它使用分离轴定理进行碰撞检测和响应,但是当我发现没有太多关于物体与另一个形状碰撞(使用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;
}
void CBody::ProcessCollision(CBody&xBody,const Vector&N,float t)
{
向量D=m_xDisplacement-xBody.m_xDisplacement;
浮点数n=D*n;
向量Dn=N*N;
向量Dt=D-Dn;
如果(n>0.0f)Dn=Vector(0,0);
浮点数dt=dt*dt;
浮动系数=s_摩擦;
如果(dt
碰撞检测和如何处理碰撞是两件不同的事情

碰撞后会发生什么取决于你想要达到什么样的物理效果


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

尽管这样做可行,但您的相同方法不会在所有情况下都有效,因为您没有选择要翻转哪个组件的原则。我试图实现的是刚体物理模拟,是完美的弹性还是真实的损耗?有摩擦还是没有摩擦?有很多选择可以影响物理引擎的复杂性。我的例子只是最简单的模型之一。我的建议是从一个非常简单的模型开始,并在必要时使其更加复杂。