2017-10-20 24 views
1

私はpymunkとの新たなんだと私はこの1つのような(2Dで)N体シミュレーションを実施したいと思います:https://www.youtube.com/watch?v=otIGNTFJwpU&feature=youtu.bepymunkでn-bodyシミュレーションを実装するには?

私はすでにpygameのとスペース、形状およびレンダリングを作成する方法を知っています。私の質問:には、pymunkの形の中に重力を加える方法がありますか?

ありがとうございました。

+0

あなたは可能性がありあなたが試したことを示したり、あなたが行った研究を記述したりできますか?あなたはこれをpymunkで行うことができないことをどのように確立しましたか? – barny

+0

だから私はすでに体とのスペースを作ることでした。今私は体の各対の間に重力をかける必要があります。私の最初の推測は、 'pymunk.constraint'を使うことでした。*は、二つのボディがどうやって相互作用するかを記述しています*。ただし、このクラスには、[[ピンジョイント]、[スライドジョイント]、[ピボットジョイント]、[グルーブジョイント]、[DampedSpring]、[DampedRotarySpring]、[RotaryLimitジョイント]、[ラチェットジョイント]、[ギアジョイント]、[SimpleMotor]重力を再現するためにこれらを微調整することは明らかに見えません。 – rronan

+0

あなたの質問を編集して、すでに持っているコードを含めることができますか(コードとしてフォーマットするには4つのスペースを使用してください)。あなたが使用したいと思う方法はあなたのシステムのボディの二重forループです。次に、[逆平方法則](https://en.wikipedia.org/wiki/Gravity#Newton.27s_theory_of_gravitation)を使って大きさを計算し、[apply_force_at_local_point](http://www.pymunk.org/ja/)を使用します。最新/ pymunk.html#pymunk.Body.apply_force_at_local_point)をオブジェクトの中央に配置します。 – cdo256

答えて

1

pymunkに直接行う方法はありません。最も簡単なのはおそらくそれを自分で計算することです。ボディをループし、各ボディに対して、近くのボディを見つけるためのスペースクエリを作成します。結果の重力を計算し、適用インパルスを使用する。

おそらく

(例えばピンジョイントや減衰春、制約の1つでemualteするおそらくその可能..しかし、それはいくつかの思考を必要とし、その可能性と良く見えるかどうかを調べるために実験します)

+0

こんにちはViblo、あなたの答えをありがとう。最終的に私はChipmunkのソースコードに入り、 'apply_impulse()'を修正した 'cpDampedSpring'のコピーを作成しました(私のfork [here](https://github.com/rronan/pymunk/blob/master/chipmunk_src/ src/cpGravitation.c))。 Pythonラッパーも更新したので、オブジェクト間に「Gravitation」制約を追加できるようになりました。ループを自分で行う必要はありません。 それはうまくいくようですが、それを良くするためのアイデアがあれば教えてください。 そして、pymunkに感謝します。 – rronan

+0

興味深い!この制約がより多くの人々に役立つ場合は、メインのChipmunkレポ(https://github.com/slembcke/Chipmunk2D)に対してPRすることができます。 – viblo

関連する問題