Estoy jugando con las órbitas en un simple juego 2-d donde un barco vuela por el espacio y se siente atraído por cosas masivas. La velocidad de la nave se almacena en un vector y la aceleración se aplica a cada cuadro según corresponda, dada la ley de gravitación universal de Newton. Las masas de puntos no se mueven (solo hay 1 en este momento), por lo que esperaría una órbita elíptica.
En cambio, veo esto:
He intentado con órbitas casi circulares, y he intentado hacer que las masas sean muy diferentes (un factor de un millón) pero siempre obtengo esta órbita rotada.
Aquí hay un código (D), para el 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);
}