SFML:Реализация перигелия и афелия
Планета движется по закону:
x=Sun.x+radius.x*cos(time*speed);
y=Sun.y+radius.y*sin(time*speed);
Как реализовать ускорения при приближении до планеты и уменьшении скорости при отдалении? Спасибо!
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Решите численно уравнение Кеплера
2*Pi * t / T = E - e * sin(E)
где T - период, e - эксцентриситет
Т.е. в каждый период времени t нужно найти величину E (эксцентрическую аномалию), а из неё уже истинную аномалию v, что и даст положение планеты.
v = 2 * atan (tan(E/2) * Sqrt((1+e)/(1-e)))
Простая имитация разной скорости (с Солнцем в центре, а не в фокусе, как у автора) с использованием такого (Delphi) кода - приращение угла зависит от самого угла.
cf := 1.0 / (2 + Cos(2 * an));
an := an + speed * cf;
x := cx + Round(rx * Cos(an));
y := cy + Round(ry * Sin(an));
Canvas.Brush.Color := clBlue;
Canvas.Ellipse(x - 10, y - 10, x + 11, y + 11);

