2017-10-20 110 views
1

我是新與pymunk,我想實現一個N體模擬(二維)像這樣的:https://www.youtube.com/watch?v=otIGNTFJwpU&feature=youtu.be如何使用pymunk實現n體仿真?

我已經知道如何創造空間,形狀與pygame的渲染。我的問題:有沒有一種方法可以在寶石形狀之間添加引力?

感謝您的幫助。

+0

也許你可以展示你所嘗試過的東西,或者描述你所做的研究?你如何確定這不能由pymunk完成? – barny

+0

好,所以我已經做的是與身體創造空間。現在我需要在每對身體之間實施引力。我的第一個猜測是使用'pymunk.constraint',它描述了兩個物體如何相互作用。然而這個類只包含'[「PinJoint」,「SlideJoint」,「PivotJoint」,「GrooveJoint」,「DampedSpring」,「DampedRotarySpring」,「RotaryLimitJoint」,「RatchetJoint」,「GearJoint」,「SimpleMotor」對於調整這些來重現萬有引力並不明顯。 – rronan

+0

請你可以編輯你的問題,包括你已有的代碼(使用4個空格格式化爲代碼)。您可能想要使用的方法是對系統中的身體進行雙重循環。然後使用[平方反比法](https://en.wikipedia.org/wiki/Gravity#Newton.27s_theory_of_gravitation)計算出重要程度並使用[apply_force_at_local_point](http://www.pymunk.org/en/) latest/pymunk.html#pymunk.Body.apply_force_at_local_point)放在對象的中心。 – cdo256

回答

1

沒有內置的方式直接在pymunk中完成它。最簡單的可能是自己計算一下。循環身體,併爲每個身體進行空間查詢以查找附近的身體。計算產生的重力並使用衝量。

(可能還有其可能的制約因素之一emualte,例如銷接頭或阻尼彈簧..但是,這將需要一些思考和試驗,以找出是否可能和看起來不錯)

+0

嗨Viblo,謝謝你的回答。最後,我進入Chipmunk源代碼,並創建了'cpDampedSpring'的副本,我修改了'apply_impulse()'(參見我的fork [here](https://github.com/rronan/pymunk/blob/master/chipmunk_src/) SRC/cpGravitation.c))。 當我更新python包裝,我現在可以在對象之間添加「引力」約束,我不需要自己做循環。 它似乎工作得很好,但如果你有想法讓它變得更好,請讓我知道。 並感謝pymunk。 – rronan

+0

有趣!也許你可以針對主要的Chipmunk repo(https://github.com/slembcke/Chipmunk2D)製作一個PR,以防止這個限制對更多人有用。 – viblo