15

さて、私はたくさんのボールを持っています:

イグナイトボール


私が理解しようとしているのは、これらの円を作成する方法です。

  • 接触している表面に基づいて回転します

  • 複数の接触するオブジェクトを処理するときの衝突の侵入を修正しました。


編集:これは私が回転によって意味するものです

代替テキスト

  • ボール0は、ボール3に寄りかかっているため、反時計回りに回転します。

  • ボール5は、ボール0に寄りかかっているため、時計回りに回転します。


これに対する解決策は普遍的ですが、記録のために私はJavascriptとSVGを使用しており、ライブラリを使用するよりも自分でこれを実装することを好みます。

助けていただければ幸いです。ありがとう!:)

4

3 に答える 3

6

物理学の観点からは、線形運動量と角運動量の両方を保存したいように思えます。

出発点として、両方をモデル化するODE行列を確立し、線形代数を実行してそれらを解決する必要があります。私は個人的に、そのソリューションにNumpy / Scipy(おそらくスパース配列を使用)を使用します。しかし、多くのアプローチがあります(sympyが思い浮かびます)。どのモジュールを使用しますか?

反発係数と摩擦係数よく理解し、運動エネルギーも節約するかどうかを決定する必要があります。(彼らが永遠に跳ね返り、転がり続けるかどうかを気にしますか?)(おそらくエネルギーマトリックスも必要になるでしょう)

2つのボールの中心が2つの半径の合計よりも近くないという条件を確認しながら、タイムステップごとにこれらの行列を解きます。(..もしそうなら、衝突後の状態の運動量とエネルギーの項を調整します)

これは、大きなプロジェクトの始まりのほんの一部です。なぜこれを最初からやりたいのか聞いてもいいですか?

于 2010-01-24T17:30:31.883 に答える
6

ここに私があなたの探求に役立つと思ういくつかのリンクがあります:

Box2D

高度なキャラクター物理学

Javascriptボールシミュレーション

Box2Dにはあなたが探しているものがあり、そのオープンソースは私が信じています。ファイルをダウンロードして、効果を達成するためにファイルがどのように機能するかを確認できます。

これが役立つかどうかを教えてください。ここで質問に答えるのが上手になります。:)

編集:

それで、私は先に進んで、これをもう少し考えて、どのようにアプローチするかについての洞察を与えました。下の画像を見てください:

基本的に、グリッド上の角度を比較します。ボールが落下するボールと比較して+30度落下している場合は、ボールを積極的に回転させます。ボールが落下するのと比較して-30度落下する場合は、ボールを負に回転させます。これが正しい解決策であるとは言いませんが、考えてみると、これは私が問題にすぐに取り組む方法です。

代替テキスト

于 2010-01-29T06:50:40.597 に答える
3

ゲーム物理シミュレーションの本や記事をチェックすることをお勧めします。たとえば、 O'Reilly's Physics forGameDevelopersやGamasutraのWebサイトを参照してください。

于 2010-01-24T17:47:28.723 に答える