在我的应用程序中,当两个物体发生碰撞时,我必须根据它们的碰撞速度和碰撞容差来决定是否损坏一个物体。物体可以从任何方向碰撞。我对向量操作的了解很少。我不知道如何设置公差,然后比较它们的速度和公差。任何人都可以提供有关设置容差并进行比较的想法吗?
问问题
123 次
1 回答
1
最简单的方法是取它们的速度之间的差异,例如。
b2Vec2 velDiff = body1->GetLinearVelocity() - body2->GetLinearVelocity();
float collisionSpeed = velDiff.Length();
您可能还需要考虑相关物体的质量,因为较重的物体之间的碰撞会产生更多的能量。
对于像圆形或盒子这样的简单形状,这通常就足够了,尤其是当它们直接碰撞时。对于更长的薄形状,或者物体在远离质心的一点碰撞,或者它们显着旋转的地方,你可能会发现它是不准确的。
一种更准确的方法是检查 Box2D 计算出的将物体分开的碰撞反应脉冲的大小。您可以通过在碰撞回调中实现 PostSolve 函数并查看 normalImpulse 组件的大小来发现这一点。
于 2012-09-27T06:20:14.267 回答