Saya bermain dengan orbit dalam permainan 2-d sederhana di mana sebuah kapal terbang di angkasa dan tertarik pada hal-hal besar. Kecepatan kapal disimpan dalam vektor dan akselerasi diterapkan ke setiap frame yang sesuai dengan hukum gravitasi universal Newton. Massa titik tidak bergerak (hanya ada 1 sekarang) jadi saya akan mengharapkan orbit elips.
Sebaliknya, saya melihat ini:
Saya sudah mencoba dengan orbit yang hampir melingkar, dan saya telah mencoba membuat massa sangat berbeda (faktor sejuta) tetapi saya selalu mendapatkan orbit yang diputar ini.
Berikut beberapa kode (D), untuk konteks:
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);
}