私は非常に単純な物理エンジンを開発中です。その中の唯一の非静的オブジェクトは円であり、実行する唯一の衝突検出は円と線片の間です。
この目的のために、 Advanced Character Physicsで説明されている原則を利用しています。つまり、単純な Verlet インテグレータを使用して統合を行います。円と線片の間の距離を計算するだけで衝突の検出と応答を実行し、距離が円の半径よりも小さい場合は、線片から円を投影します。
これは非常にうまく機能し、その結果、実質的に完全な移動円が得られます。エンジンの現在の状態は、http: //jsfiddle.net/8K4Wj/で確認できます。ただし、これは私が直面している1つの大きな問題も示しています。円はまったく回転しません。
私が理解できる限り、別々に対処しなければならない 3 つの異なる衝突ケースがあります。
- 円が線の頂点と衝突し、線に沿って転がっていない場合。
- 円が線に当たった、または転がったとき。次に、衝突の正確なポイントを計算する必要があり (どのように?)、円は衝突位置と投影位置の間の距離に応じて回転します。
- 円が線に沿って転がっているとき。次に、最後のフレームから移動した距離に応じて単純に回転します。
問題を解決するのに最も近いのはhttp://jsfiddle.net/vYjzt/です。しかし、デモが示すように、おそらくエッジケースを処理しません。
私はオンラインで解決策を検索しましたが、特定の問題を具体的に扱う資料を見つけることができません (物理エンジンは比較的単純であり、複雑な物理シミュレーションの概念に煩わされたくないと言いました)。