Ich spiele mit Umlaufbahnen in einem einfachen 2-D-Spiel, in dem ein Schiff im Weltraum herumfliegt und sich von massiven Dingen angezogen fühlt. Die Schiffsgeschwindigkeit wird in einem Vektor gespeichert, und die Beschleunigung wird in jedem Frame entsprechend dem Newtonschen Gesetz der universellen Gravitation auf ihn angewendet. Die Punktmassen bewegen sich nicht (es gibt momentan nur eine), daher würde ich eine elliptische Umlaufbahn erwarten.
Stattdessen sehe ich Folgendes:
Ich habe es mit fast kreisförmigen Umlaufbahnen versucht, und ich habe versucht, die Massen stark zu verändern (ein Faktor von einer Million), aber ich bekomme immer diese gedrehte Umlaufbahn.
Hier ist ein (D) Code für den Kontext:
void accelerate(Vector delta)
{
velocity = velocity + delta; // Velocity is a member of the ship class.
}
// This function is called every frame with the fixed mass. It's a
// method of the ship's.
void fall(Well well)
{
// f=(m1 * m2)/(r**2)
// a=f/m
// Ship mass is 1, so a = f.
float mass = 1;
Vector delta = well.position - loc;
float rSquared = delta.magSquared;
float force = well.mass/rSquared;
accelerate(delta * force * mass);
}