0

私のアプリでは、2 つの物体が衝突したときに、衝突速度と衝突許容値に応じて、物体に損傷を与えるかどうかを決定する必要があります。ボディはあらゆる方向から衝突できます。ベクトル操作に関する私の理解はほとんどありません。公差を設定する方法がわかりません。速度と公差を比較します。許容範囲を設定して比較することについて、誰か考えを教えてもらえますか?

4

1 に答える 1

1

最も簡単な方法は、それらの速度の差をとることです。

b2Vec2 velDiff = body1->GetLinearVelocity() - body2->GetLinearVelocity();
float collisionSpeed = velDiff.Length();

重い物体間の衝突はより多くのエネルギーを持っているので、関係する物体の質量も考慮に入れることをお勧めします。

通常、円やボックスのような単純な形状の場合、特に直接衝突する場合は、これで十分です。より長く薄い形状の場合、またはボディが重心から離れたポイントで衝突する場合、またはボディが大幅に回転している場合は、不正確であることがわかる場合があります。

より正確な方法は、Box2Dがボディを押し離すために計算した衝突反応インパルスのサイズを確認することです。これは、衝突コールバックにPostSolve関数を実装し、normalImpulseコンポーネントのサイズを確認することでわかります。

于 2012-09-27T06:20:14.267 に答える