1

私は非常に単純な物理エンジンを開発中です。その中の唯一の非静的オブジェクトは円であり、実行する唯一の衝突検出は円と線片の間です。

この目的のために、 Advanced Character Physicsで説明されている原則を利用しています。つまり、単純な Verlet インテグレータを使用して統合を行います。円と線片の間の距離を計算するだけで衝突の検出と応答を実行し、距離が円の半径よりも小さい場合は、線片から円を投影します。

これは非常にうまく機能し、その結果、実質的に完全な移動円が得られます。エンジンの現在の状態は、http: //jsfiddle.net/8K4Wj/で確認できます。ただし、これは私が直面している1つの大きな問題も示しています。円はまったく回転しません。

私が理解できる限り、別々に対処しなければならない 3 つの異なる衝突ケースがあります。

  1. 円が線の頂点と衝突し、線に沿って転がっていない場合。
  2. 円が線に当たった、または転がったとき。次に、衝突の正確なポイントを計算する必要があり (どのように?)、円は衝突位置と投影位置の間の距離に応じて回転します。
  3. 円が線に沿って転がっているとき。次に、最後のフレームから移動した距離に応じて単純に回転します。

問題を解決するのに最も近いのはhttp://jsfiddle.net/vYjzt/です。しかし、デモが示すように、おそらくエッジケースを処理しません。

私はオンラインで解決策を検索しましたが、特定の問題を具体的に扱う資料を見つけることができません (物理エンジンは比較的単純であり、複雑な物理シミュレーションの概念に煩わされたくないと言いました)。

4

1 に答える 1

2

あなたのデモで間違っているように見えるのは、モーションを決定するときに角モーメントとエネルギーを考慮していないことです

簡単なケースとして、デモで車輪が床に落ちると、自由落下中に回転が止まります。角運動量はそれを維持する必要があります。

より複雑な状況は、ホイールが最終的に床に着地するときで、床に着く前と同じ水平方向の速度で移動します。回転していない場合は正しいですが、回転しているため、運動エネルギーの一部が回転運動に入る必要があり、これにより速度が低下するはずです。これのより明確な例として、ホイールが高速で回転しているが、直線的な運動量がない反対のケースを考えてみましょう。このホイールが床に置かれると、離陸し、回転が遅くなるはずです。また、たとえば、車輪が丘を転がり落ちるとき、エネルギーが直線運動と円運動の両方に入る必要があるため、車輪の加速が遅くなります。

難しいことではありませんが、回転する物体を直感的に正しく表示するには、回転に伴う運動エネルギーと角運動量を考慮する必要があると思います。「それほど難しくない」とは、すべての方程式が本質的に2倍長くなり、1つの項が直線運動を表し、別の項が角度を表すことを意味します。すべての方程式を暗唱するわけではありません。基本的には、物理​​学のテキストの回転運動の章にすぎません。

(いいデモですね!)

于 2012-08-11T15:57:44.027 に答える