2012-09-11 9 views
8

最近私はjMonkeyエンジンを使い始めました。これはとてもいいです。しかし、私は相対的重力を実装しようとしている。相対重力

私はお互いの周りを周回する惑星を作りたいです(必ずしも完全な円形軌道ではなく、速度に依存します)。したがって、すべてのオブジェクトは他のオブジェクトに影響を与える必要があります。私が今持っている何

は球を初期化し、物理空間に

Sphere sphere = new Sphere(50, 50, 5); 
Geometry sun = new Geometry("Sun", sphere); 

sun.setMaterial(stone_mat); 
rootNode.attachChild(sun); 
sun.setLocalTranslation(0, 0, 0); 

sunPhysics = new RigidBodyControl((float) (50*Math.pow(10, 5))); 
sun.addControl(sunPhysics); 
bulletAppState.getPhysicsSpace().add(sunPhysics); 

Geometry mercury = new Geometry("Mercury", sphere); 

mercury.setMaterial(stone_mat); 
rootNode.attachChild(mercury); 
mercury.setLocalTranslation(15f, 0, 0); 

mercuryPhysics = new RigidBodyControl((float) (5)); 
mercury.addControl(mercuryPhysics); 
bulletAppState.getPhysicsSpace().add(mercuryPhysics); 

を追加するグローバルな重力

bulletAppState.getPhysicsSpace().setGravity(Vector3f.ZERO); 

をオフにする私は方法があることに気づいたsetGravity RigidBodyControlクラスでは、方向を設定するだけです。オブジェクトはそれが消えてしまうまでそのように行きます。

私は本当に答えを楽しみにしています。

答えて

1

全体物理学の重力は、すべてのオブジェクトの一方向です。

あなたがやったように0に重力を設定して、次の式

F = m * a 

F - force 
m - objects mass 
a - acceleration 

地球上の定期的な加速度が宇宙の加速でg == 9.8

、すべてが依存しているを使用して、すべてのシミュレーションステップの後に、あまりにもすべてのオブジェクトを力を適用する必要があります惑星または惑星からの距離。

あなたが怒っている鳥のスペースのようなゲームをシミュレートしたいなら、あなたはあなたが安定したシステムが必要な場合は、シミュレートされた物理学を使用していないそのゲームに http://www.wired.com/wiredscience/2012/03/the-gravitational-force-in-angry-birds-space/

+0

あなたは、私はそれを実現するための「よりシンプル」な方法があるかもしれないことしかし、applyCentralForce方法で – Max

+0

おかげで力を加えることができます。しかし、問題はありません、私はそれをあなたが提案した方法で試してみます:) –

0

を重力についての記事を読んで検討すべきです。 (しかし、システムに十分な重要な体がある場合、どのように行動すべきかは誰も知らないので、重要ではありません)。

ソーラーシステムの場合は、私は惑星(あなた自身で移動する)のためにキネマティックモードを使用し、船舶、小惑星などは力を使用します。 (あなたは太陽系でbiliardを作る場合を除き)

3

万有引力の法則はF = G (m1 * m2)/r^2m1m2は、二つの物体の質量であり、rは距離であると言います。 は重力定数です。

ニュートンの第二法則はF = m * a氏は述べていますので、我々はそれらを一緒に置けば、質量m1と体は質量m2で体内から引力からa = G * m2/r^2の加速を経験するでしょう。

ここで、シミュレーションの各ステップで、各ボディについて、aを合計し、その加速度をボディの速度に適用します。

a(body1) = G * sum[ mass(body2)/dist(body1, body2)^2 , for each body2 ]