Орбітальна механіка та закони Кеплера: від еліпса до рівняння аномалії
Три закони Кеплера дозволяють обчислити точне положення будь-якої планети у будь-який момент часу — без чисельного інтегрування. Ключ: трансцендентне рівняння Кеплера, яке вирішується кількома ітераціями методу Ньютона.
1. Три закони Кеплера
Йоганн Кеплер (1609–1619) вивів свої закони з спостережень Тихо Браге — і вони виявилися точними задовго до того, як Ньютон пояснив їх через закон тяжіння.
Кожна планета рухається по еліпсу, в одному з фокусів якого знаходиться Сонце.
Радіус-вектор планети замітає рівні площі за рівні проміжки часу.
Квадрат орбітального періоду пропорційний кубу великої напівосі: T² ∝ a³.
Разом ці закони описують кеплерівський рух — ідеальну дві-тільну задачу, де масою людини нехтуємо, а Сонце нерухоме. Реальний Сонячний рух відхиляється від цього через взаємні тяжіння планет — саме тоді потрібні N-тіла.
2. Геометрія еліпса
Еліпс визначається великою напівосю a та ексцентриситетом e ∈ [0, 1):
c = a · e ← відстань центр → фокус
r_min = a(1 − e) ← перигелій (найближча до Сонця точка)
r_max = a(1 + e) ← афелій (найдальша точка)
У фокусній системі координат (Сонце у лівому фокусі) положення точки на еліпсі описується через справжню аномалію ν (кут відносно перигелію):
3. Перший закон — еліптична орбіта
Орбіту повністю описують 6 орбітальних елементів Кеплера. Для 2D-симуляції Сонячної системи достатньо двох:
- a — велика напівось (розмір орбіти, в а.о.)
- e — ексцентриситет (форма: 0 = коло, близько до 1 = дуже видовжений еліпс)
Для 3D потрібні ще нахил i, довгота висхідного вузла Ω, аргумент перицентру ω та середня аномалія у епох M₀. NASA Horizons публікує всі 6 елементів для кожної планети.
4. Другий закон — рівні площі та збереження моменту
Другий закон Кеплера — це збереження кутового моменту:
dA/dt = L / (2m) = const ← секторна швидкість — константа
Наслідок: у перигелії планета рухається найшвидше, в афелії — найповільніше. Кутова швидкість ν̇ змінюється з відстанню:
μ = G·M — гравітаційний параметр Сонця
У а.о./рік²: μ = 4π² (при a в а.о., T в роках)
Це означає, що ми не можемо просто лінійно змінювати ν за часом — нам потрібна фізична прив'язка через рівняння Кеплера.
5. Третій закон — гармонічний
Ньютон вивів точну форму через закон тяжіння:
У системі а.о.–рік: T [роки] = a^(3/2) [а.о.]
Земля: a = 1 а.о. → T = 1 рік ✓
Марс: a = 1.524 → T = 1.524^1.5 ≈ 1.88 рр ✓
Юпітер: a = 5.203 → T = 5.203^1.5 ≈ 11.86 рр ✓
Третій закон дозволяє обчислити кутову швидкість (середній рух) n:
6. Рівняння Кеплера та аномалії
Щоб знайти де знаходиться планета у момент часу t, потрібно пов'язати час із кутом. Введемо три аномалії:
- Середня аномалія M — лінійна функція часу:
M = n·(t − t_peri) - Ексцентрична аномалія E — допоміжний кут, паметричне опис еліпса
- Справжня аномалія ν — реальний кут на орбіті
Зв'язок M і E — трансцендентне рівняння Кеплера:
Це рівняння не можна вирішити аналітично для E. Використовують ітерацію Ньютона:
Eₙ₊₁ = Eₙ − (Eₙ − e·sin(Eₙ) − M) / (1 − e·cos(Eₙ))
Сходиться за 3–5 ітерацій для всіх планет Сонячної системи
Маючи E, обчислюємо справжню аномалію ν та декартові координати на орбіті:
y_orb = a · √(1−e²) · sin(E)
tan(ν/2) = √((1+e)/(1−e)) · tan(E/2)
r = a · (1 − e · cos(E)) ← відстань до Сонця
7. JavaScript реалізація
/** Вирішує рівняння Кеплера методом Ньютона */
function solveKepler(M, e, tol = 1e-9) {
M = M % (2 * Math.PI); // Нормалізація до [0, 2π]
let E = M;
for (let i = 0; i < 50; i++) {
const dE = (E - e * Math.sin(E) - M) / (1 - e * Math.cos(E));
E -= dE;
if (Math.abs(dE) < tol) break;
}
return E;
}
/** Повертає {x, y} у площині орбіти (а.о.) */
function orbitalPos(a, e, M) {
const E = solveKepler(M, e);
return {
x: a * (Math.cos(E) - e),
y: a * Math.sqrt(1 - e * e) * Math.sin(E)
};
}
/** Планети: a (а.о.), e, period (роки), color */
const PLANETS = [
{ name: 'Mercury', a: 0.387, e: 0.206, T: 0.241, color: '#a8a8a8' },
{ name: 'Venus', a: 0.723, e: 0.007, T: 0.615, color: '#f5c842' },
{ name: 'Earth', a: 1.000, e: 0.017, T: 1.000, color: '#4fa3e0' },
{ name: 'Mars', a: 1.524, e: 0.093, T: 1.881, color: '#d95030' },
{ name: 'Jupiter', a: 5.203, e: 0.049, T: 11.86, color: '#e8b87d' },
{ name: 'Saturn', a: 9.537, e: 0.057, T: 29.46, color: '#c8b560' },
];
// Анімація: t у роках
let t = 0;
function animate() {
clearCanvas();
drawSun();
for (const p of PLANETS) {
const n = 2 * Math.PI / p.T; // середній рух [рад/рік]
const M = n * t; // середня аномалія
const { x, y } = orbitalPos(p.a, p.e, M);
drawPlanet(x, y, p.color, p.name);
}
t += 0.005; // 1 кадр = ~1.8 дня
requestAnimationFrame(animate);
}
Обчислення точного положення планети займає ~10 нс. Навіть усі 8 планет + Плутон + 100 астероїдів розраховуються за <5 мкс — набагато дешевше за N-тіла.
8. Реальні дані планет
| Планета | a (а.о.) | e | T (роки) | Перигелій (а.о.) | Афелій (а.о.) |
|---|---|---|---|---|---|
| Меркурій | 0.387 | 0.206 | 0.241 | 0.307 | 0.467 |
| Венера | 0.723 | 0.007 | 0.615 | 0.718 | 0.728 |
| Земля | 1.000 | 0.017 | 1.000 | 0.983 | 1.017 |
| Марс | 1.524 | 0.093 | 1.881 | 1.381 | 1.666 |
| Юпітер | 5.203 | 0.049 | 11.86 | 4.950 | 5.455 |
| Сатурн | 9.537 | 0.057 | 29.46 | 9.001 | 10.07 |
| Уран | 19.19 | 0.046 | 84.01 | 18.29 | 20.09 |
| Нептун | 30.07 | 0.010 | 164.8 | 29.77 | 30.37 |
Дані відповідають середнім орбітальним елементам J2000 (NASA JPL). Реальні елементи повільно змінюються через прецесію (спорадичні збурення від інших планет).
9. Кеплер vs N-тіла: коли що обирати
Аналітичний підхід Кеплера та чисельний метод N-тіл вирішують різні задачі:
| Критерій | Кеплер (аналіт.) | N-тіло (Leapfrog) |
|---|---|---|
| Тіл | Одне тіло навколо центру | Будь-яка кількість |
| Точність | Машинна (±eps) | Залежить від dt |
| Швидкість | O(1) на планету | O(N²) або O(N log N) |
| Взаємодії | Лише з центр. тілом | Всі попарно |
| Приклад | Положення Марсу через 1000 р. | Зіткнення галактик, тіло+місяць |
Для Сонячної системи повнофункціональна симуляція поєднує обидва: Кеплер для фонових планет (не впливають між собою), N-тіло для випадків, де потрібні збурення (астероїди поблизу Юпітера, резонанси в поясі Койпера).
🪐 Симуляція Сонячної системи
Інтерактивна Сонячна система з реальними орбітальними елементами планет та Three.js.