Vector Box2d比较碰撞

Vector Box2d比较碰撞,vector,box2d,collision,Vector,Box2d,Collision,在我的应用程序中,当两个物体发生碰撞时,我必须根据它们的碰撞速度和碰撞容差来决定是否损坏一个物体。这些物体可以从任何方向碰撞。我对向量操作的理解很少。我不知道如何设置公差,然后比较它们的速度和公差。有人能给出一个关于设置公差并进行比较的想法吗?最简单的方法是计算它们的速度差,例如 b2Vec2 velDiff = body1->GetLinearVelocity() - body2->GetLinearVelocity(); float collisionSpeed = velDif

在我的应用程序中,当两个物体发生碰撞时,我必须根据它们的碰撞速度和碰撞容差来决定是否损坏一个物体。这些物体可以从任何方向碰撞。我对向量操作的理解很少。我不知道如何设置公差,然后比较它们的速度和公差。有人能给出一个关于设置公差并进行比较的想法吗?

最简单的方法是计算它们的速度差,例如

b2Vec2 velDiff = body1->GetLinearVelocity() - body2->GetLinearVelocity();
float collisionSpeed = velDiff.Length();
你可能还想考虑到相关物体的质量,因为较重物体之间的碰撞会产生更多的能量

对于简单的形状,如圆形或长方体,这通常就足够了,特别是当它们直接碰撞时。对于较长较薄的形状,或者物体在远离其质心的位置碰撞,或者它们显著旋转的位置,您可能会发现这是不准确的

更准确的方法是检查Box2D计算出的将物体推开的碰撞反应冲量的大小。您可以通过在冲突回调中实现PostSolve函数,并查看normalImpulse组件的大小来发现这一点