Я играю с орбитами в простой 2-ой игре, где корабль летает в космосе и притягивается к массивным вещам. Скорость корабля сохраняется в векторе, и ускорение применяется к нему в каждом кадре в зависимости от обстоятельств, учитывая закон всемирного тяготения Ньютона. Точечные массы не двигаются (сейчас их всего 1), поэтому я бы ожидал эллиптическую орбиту.
Вместо этого я вижу это:
Я пробовал с почти круговыми орбитами, и я пытался сделать массы совершенно разными (в миллион раз), но я всегда получаю эту повернутую орбиту.
Вот некоторый (D) код для контекста:
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);
}