2012-01-03 24 views
1

私はちょっと遊んでいて、後のプロジェクトで作業するためにいくつかのことをしようとしていますが、解決策を見つけることができないという問題があります。衝突検出とバウンス

現在、私は作業と正確な衝突検出を行っていますが、問題は物理を作り出すことです。物理は今は単純ですが、オブジェクトには方向と速度のベクトルがあり、衝突するとベクトルが反転します。

問題が発生するのは、オブジェクトが衝突したときに、互いに押し込まれ、ベクトルが永遠に反転して奇妙な結果が生じることです。例えば。魔法のように上に浮かんだり、物理学を完全に無視しているように見えます。

誰でもお手伝いできますか?

EDIT: 検出は軸定理を分離することによって行われ、コードを置かなかったのは、実際に進んでいるのは、ベクトルが反転したときに衝突をチェックするループがあるからです。私が言ったように、実際の検出はうまくいきます。Sibboがオブジェクトを動かしてもはや衝突しないように言いました。

+2

もっと具体的な質問をし、われわれが手助けをするための簡潔なコード例を提供する必要があります。今質問はあまりにも曖昧です。 – Gray

答えて

1

私はあなたの実装がわかりませんが、衝突を検出したら、もはや触れないようにオブジェクトを移動する必要があります。これにより、プログラムが無限ループループに入るのを防ぐことができます

+1

それは私がしなければならなかったことです:) ty – SpaceFace

1

速度ベクトルを反転するだけでなく、オブジェクトをわずかに離して(衝突のしきい値外に)移動します。あなたが位置についても同様にベクトルを使用していると仮定すると、オブジェクトがもはや衝突すると見なされないように値を変更するだけです。

0

それぞれのオブジェクトはサイズを持つ必要があり、互いのエッジから跳ね返るときに、それらの線をバイセクシュアルにするラインからはね返ります。あなたはすべての物体が同じ質量を持つと仮定していますか?

1

私は最近、大学のプロジェクトのためのビリヤードゲームの物理学を書いています(これはおそらく業界標準に準拠したコードではありませんが、それは想定している通りです)。同じ衝突の影響を計算するための無限ループを防ぐために終わったのは、すべての衝突をjava.util.Listに格納し、次の衝突が計算されるたびに、衝突に参加している両方のオブジェクトすでに計算された最後の衝突の一部であった。その場合、そのオブジェクトペアは無視されました。

これには上下の欠点があります:逆さまですが、(最小限の)オフセット移動を使用して不正確さを導入しないので、オブジェクトはもはや接触しません。下側は、2つの同じオブジェクト間で2つの衝突を連続して行うことはできません(たとえば、(ball_1、ball_2);(ball_1、ball_2); ...)を持つことはできません。あなたの衝突のリストとして[(ball_1、ball_2);(ball_1、table);(ball_1、ball_2); ...]のようになります。