Estou brincando com órbitas em um jogo 2D simples, onde uma nave voa no espaço e é atraída por coisas maciças. A velocidade da nave é armazenada em um vetor e a aceleração é aplicada a ela em todos os quadros, conforme apropriado, dada a lei da gravitação universal de Newton. As massas pontuais não se movem (há apenas 1 no momento), então eu esperaria uma órbita elíptica.
Em vez disso, vejo o seguinte:
Eu tentei com órbitas quase circulares e tentei tornar as massas muito diferentes (um fator de um milhão), mas sempre obtenho essa órbita girada.
Aqui está um código (D), para o contexto:
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);
}