2012-09-11 18 views
8

Ich habe vor kurzem mit der jMonkey-Engine angefangen, was sehr schön ist. Aber ich blieb stecken und versuchte, die relative Schwerkraft zu implementieren.Relative Gravitation

Ich möchte Planeten umkreisen (nicht unbedingt in perfekt kreisförmiger Umlaufbahn, abhängig von der Geschwindigkeit). Jedes Objekt sollte also andere Objekte beeinflussen.

Was ich habe jetzt:

globalen Schwere

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

Initialisierung Sphären und das Hinzufügen der Physik Raum

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); 

Ausschalten ich bemerkt, dass es Verfahren SetGravity ist in RigidBodyControl Klasse, aber es legt nur die Richtung fest. Also geht das Objekt so, bis es verschwindet.

Ich freue mich wirklich auf Antworten.

Antwort

1

Schwerkraft in der Kugelphysik ist eine Richtung für alle Objekte.

Sie sollten die Schwerkraft auf 0 gesetzt, wie Sie Kraft haben und gelten auch alle Objekte nach jedem Simulationsschritt nach folgenden Formel

F = m * a 

F - force 
m - objects mass 
a - acceleration 

regelmäßige Beschleunigung auf der Erde ist g == 9.8

Im Raum Beschleunigung jeder auf abhängen kann Entfernung von Planeten oder Planeten.

Wenn Sie mögen Spiel wie Angry Birds Space simulieren, dann sollten Sie in diesem Spiel http://www.wired.com/wiredscience/2012/03/the-gravitational-force-in-angry-birds-space/

+0

Sie Kraft mit applyCentralForce Methode – Max

+0

Dank gilt, ich, dass, obwohl es sein kann, „einfacher“ Art und Weise zu implementieren.Aber kein Problem, ich werde es versuchen, wie du es vorgeschlagen hast :) –

0

lesen Artikel über die Schwerkraft berücksichtigen, wenn Sie stabileres System wollen, nicht simulierte Physik verwenden. (Aber wenn das System genug signifikante Körper hat, weiß niemand, wie es sich verhalten soll, also spielt es keine Rolle).

Für Dinge wie Sonnensystem, würde ich kinematischen Modus für Planeten verwenden (bewegen Sie sie selbst) und für Schiffe, Asteroiden etc. Kräfte nutzen. (Es sei denn, Sie in Sonnensystem machen biliard)

3

Das Gravitationsgesetz sagt F = G (m1 * m2)/r^2 wo m1 und m2 die Massen der beiden Körper sind, und r ist der Abstand. G ist die Gravitationskonstante.

Newtons zweites Gesetz sagt F = m * a, so dass, wenn wir sie zusammen, wobei der Körper mit Masse m1 würde eine Beschleunigung von a = G * m2/r^2 von Gravitationskraft aus dem Körper mit Masse m2 erleben.

Nun, was Sie tun müssten, ist: In jedem Schritt der Simulation für jeden Körper summieren Sie die a s für jeden anderen Körper und wenden diese Beschleunigung auf die Körpergeschwindigkeit an.

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