Солнечная система учебник к интерактивной 3D-симуляции
▶ Открыть симуляцию
Раздел 1 · Обзор

Что мы вообще видим

Откройте симуляцию — и вы увидите восемь точек, которые никогда не останавливаются и никогда не сталкиваются. Это и есть Солнечная система, только очень маленькая. Разберёмся, что происходит на экране, прежде чем лезть в формулы.

С этой картинки всё удобно начать

Учебник и симуляция связаны в одну петлю: прочитали раздел → открыли модель → увидели то же самое вживую. Так знание прилипает намного быстрее.

🪐 Открыть симуляцию

Картина одним взглядом

В центре — Солнце: раскалённый шар, который даёт и свет, и саму «причину движения» планет. Вокруг него идут восемь планет: от быстрого крошечного Меркурия до медленного далёкого Нептуна. Тонкие кольца — это орбиты: напоминание, где планета шла в прошлый оборот. Светящийся хвост за каждой планетой — след её движения за последние несколько секунд.

И самое важное: это не записанный мультик. Компьютер не знает заранее, где будет Земля через минуту. Он смотрит, где планета сейчас и куда она движется, спрашивает «как сильно на неё сейчас тянет Солнце (и остальные планеты)?», чуть-чуть меняет скорость, чуть-чуть сдвигает саму планету — и повторяет это десятки тысяч раз в секунду. Правила короткие, а картина рождается сама.

Что можно потрогать прямо сейчас

  • «Скорость времени» — в реальности Земля делает оборот за год. Мы сжимаем год в несколько секунд, чтобы успеть что-то заметить.
  • «Масса Солнца» — представляем, что Солнце стало тяжелее или легче: оно начинает тянуть сильнее или слабее, и орбиты сразу реагируют.
  • «+ Тело» — запускаем свою планету по круговой орбите и смотрим, как она уживается с остальными.
  • Клик по планете — справа появляются её живые показания: расстояние, скорость, период. Двойной клик — камера подлетает ближе.
  • Мышь — вращает камеру, колесо приближает. Мы летаем вокруг модели, как режиссёр с дроном.

Три слоя, из которых состоит вся эта магия

  1. Физика. Один короткий цикл: посчитать тяготение → обновить скорости → обновить позиции. Подробности — в разделе «Как компьютер это считает».
  2. Картинка. Библиотека Three.js превращает числа в шарики, свет и звёзды. Она ничего не решает — только рисует.
  3. Управление. Камера, ползунки, надписи. Они лишь передают физические желания («Солнце тяжелее вдвое») в первый слой.
Полезная привычка.

Тот же рецепт — «физика отдельно, картинка отдельно» — лежит в основе почти любой симуляции: от прогноза погоды до столкновения галактик. Один раз разобравшись в нём, вы понимаете уже не одну программу, а целый класс программ.

Планеты: кто есть кто

Расстояния в модели сжаты (иначе Нептун уехал бы на 77 «меркуриев» и остался точкой в пустоте), но порядок и связь «дальше — медленнее» честные.

Меркурий

0.39 а.е. от Солнца

Год: 88 земных суток

Скорость: 47.4 км/с

Венера

0.72 а.е.

Год: 225 суток

Скорость: 35.0 км/с

Земля

1.00 а.е. — это мы

Год: 365.25 суток

Скорость: 29.8 км/с

Марс

1.52 а.е.

Год: 687 суток

Скорость: 24.1 км/с

Юпитер

5.20 а.е.

Год: 11.9 лет

Скорость: 13.1 км/с

Сатурн

9.54 а.е.

Год: 29.5 лет

Скорость: 9.7 км/с

Уран

19.2 а.е.

Год: 84 года

Скорость: 6.8 км/с

Нептун

30.1 а.е.

Год: 165 лет

Скорость: 5.4 км/с

Найдите закономерность сами: чем дальше планета, тем медленнее она летит и тем дольше её год. Почему так выходит — почти буквально следует из двух формул; дойдём до них в следующих разделах.

Мини-проверка: почему дальние планеты движутся медленнее ближних?

Раздел 2 · Физика

Гравитация по Ньютону

Правил, по которым живёт наша модель, всего два: любое тело притягивает любое другое, и чем дальше — тем слабее. Всё красивое движение планет — это только следствия этих двух строк.

Начнём с того, что вы и так знаете

Подбросьте связку ключей. Она замедляется, на миг замирает и падает обратно — потому что Земля тянет её к себе. Никто не удивляется: тяготение рядом с поверхностью привычное и очень «локальное» чувство.

А теперь бросьте ключи вперёд, сильно. Они пролетят дугу и упадут в нескольких метрах. Бросите сильнее — пролетят дальше. Дуга растягивается не потому, что «падать перестали», а потому, что лететь вперёд успевает дальше, прежде чем кончится высота.

Ньютон предложил мысленный эксперимент, который доводит эту мысль до конца. Представьте очень высокую гору с мощной пушкой наверху, стреляющей строго горизонтально:

  • Медленно — ядро падает у подножия горы.
  • Быстрее — пролетает километр и падает в долине.
  • Ещё быстрее — пока ядро падает на один метр вниз, круглая Земля под ним «уходит» вниз тоже на метр. Ядро всё время падает — и всё время промахивается. Это и есть орбита.
Главная мысль раздела.

Планета не «побеждает» тяготение. Она непрерывно падает на Солнце, но движется настолько быстро вбок, что всё время мимо него промахивается. Никакой магической опоры, никаких «топливных баков» для движения по кругу не нужно.

Формула и что значит каждый знак

Исаак Ньютон смог записать это одной короткой строкой. Не бойтесь: сейчас мы разберём её по буквам.

F = G · m₁ m₂⁄r²
ЗнакЧто этоКак думать по-человечески
FСила притяженияСколько «тяги» тела друг к другу испытывают. Измеряется в ньютонах: 1 Н — это усилие, которым вы держите яблоко.
GГравитационная постояннаяОдно и то же число для всей Вселенной: 6.674·10⁻¹¹. Оно просто задаёт «силу» гравитации — она вообще очень слабое взаимодействие.
m₁, m₂Массы телЧем тяжелее хотя бы одно из тел, тем сильнее тяга. Массу Солнца мы как раз и крутим ползунком в симуляции.
rРасстояние между центрамиОт центра до центра, а не «от поверхности». Для шаров это законно — ведем себя так, будто вся масса в центре.
r²Расстояние в квадратеВот тут спрятано «очень быстро слабеет»: 2 раза дальше — в 4 раза слабее, 3 раза — в 9, 10 раз — в 100.

Читается формула так: «тяга тем сильнее, чем тяжелее тела, и тем стремительнее падает, чем дальше они друг от друга».

Числа для масштаба: Солнце тянет Землю с силой примерно 3.5·10²² ньютонов — это как если бы на весах висело несколько триллионов гружёных самосвалов. При этом «падение» Земли к Солнцу всего около 0.006 м/с² — в полторы тысячи раз слабее того, с чем вы имеете дело, роняя телефон. Крошечное ускорение, которое работает каждую секунду миллиарды лет, — и получается орбита.

Второй шаг: от силы к ускорению (и почему все падают одинаково)

Сила — это ещё не движение. Движение меняет ускорение: «насколько быстрее становится тело каждую секунду». По второму закону Ньютона ускорение = сила ÷ масса. Подставим нашу формулу — и случится интересное: масса падающего тела сократится.

a = G · M⁄r²
ЗнакЧто этоКак думать по-человечески
aУскорениеНасколько быстро растёт скорость (в метрах в секунду за каждую секунду).
G · MМасса «тянущего» телаЗдесь M — масса того, что тянет (Солнца, Земли). Она единственная осталась в формуле.
r²Квадрат расстоянияСнова: далеко — значит намного слабее.

Отсюда важный бытовой вывод: молоток и пёрышко падают одинаково, если нет воздуха (астронавты Apollo 15 проверили это на Луне). И следствие для нас: орбита планеты почти не зависит от её массы — зависит только от того, где она и куда движется. Поэтому в симуляции Земля и гипотетическая «вдвое тяжелее Земля» летели бы по одной и той же орбите.

Ещё одна полезная аналогия: камень на верёвочке

Раскрутите камень на верёвочке. Верёвочка всё время тянет камень к центру — это и есть та самая «тяга». Отпустите — и камень полетит не вверх и не вниз, а по прямой, по касательной к кругу.

У планет роль верёвочки играет тяготение. Порвите её (мысленно выключите Солнце) — и все восемь планет разлетятся по прямым линиям, каждая в свою сторону, ровно туда, куда она в этот момент смотрела носом. Именно это вы увидите в симуляции, если уменьшите массу Солнца почти до нуля.

Осторожно с «шаром на простыне».

Знаменитая картинка про тяжёлый шар, продавивший натянутую ткань, — это картинка про Эйнштейна и искривление пространства, а не про Ньютона. Она красиво объясняет «почему вообще есть тяготение», но считать орбиты по ней нельзя. В нашей модели работает честный ньютоновский закон: тела тянутся друг к другу, и мы считаем это шаг за шагом.

Вопрос 1. Если бы Солнце волшебным образом исчезло, что стала бы делать Земля?

Вопрос 2. Расстояние между двумя телами увеличили втрое. Как изменится сила тяготения?

Раздел 3 · Физика

Орбитальная скорость

Скорость — это единственная «ручка настройки», по которой Вселенная решает, где планете жить: упасть на Солнце, остаться рядом или улететь в межзвёздное пространство навсегда.

«Вечно падаю мимо» — теперь с числами

Вернёмся к пушке на горе. Есть одна-единственная скорость, при которой ядро падает ровно с той кривизной, что и поверхность планеты. Её называют круговой, или орбитальной, скоростью. Получается она из простой требовательности: тяготение должно закручивать траекторию ровно так сильно, как нужно для круга.

v = √( G · M⁄r )
ЗнакЧто этоКак думать по-человечески
vКруговая скоростьРовно та скорость «вбок», при которой не падаешь и не улетаешь.
√КореньОбратная к квадрату операция: потяни в 4 раза слабее — скорость нужна меньше всего в 2 раза.
G · MМасса того, вокруг чего летимЧем тяжелее «хозяин» орбиты, тем быстрее надо двигаться, чтобы удержаться.
rРасстояние до центраДальше — медленнее. Вот она, закономерность из первого раздела.

Подставьте числа для Земли (M — масса Солнца, r = 150 млн км) — получится 29.8 км/с, около 107 000 км/ч. Мы летим вокруг Солнца быстрее любой пули и не чувствуем этого, потому что летим ровно и тормозить нечему.

МКС, 400 км над нами

Круговая скорость: 7.66 км/с

Оборот за 92 минуты

Луна, 384 000 км

Круговая скорость: 1.02 км/с

Оборот за 27.3 суток

Меркурий

47.4 км/с — быстрее всех

Тут тяготение Солнца самое злое

Нептун

5.4 км/с — медленнее всех

Далеко, поэтому «спокойно»

Пушка Ньютона: посмотрите вживую

Ниже — тот самый мысленный эксперимент, только он считается по-настоящему. Четыре ядра вылетают с одной высоты горизонтально, но с разной скоростью. Единственное различие между ними — число v.

Ядра считают по тому же ньютоновскому закону, что и большая симуляция, — только в двумерном мире.
медленнее круговой → падение на планету ровно круговая → вечная орбита быстрее круговой → вытянутый эллипс выше второй космической → улетает навсегда

Посмотрите на синюю траекторию: она не «уходит всё дальше», а возвращается. Чуть большая скорость — это не бегство, а эллипс: планета удаляется, тормозит, падает обратно и повторяет. Так живут почти все настоящие орбиты: у Марса, у комет, у вашего тела в симуляции, если его чуть разогнать.

Вторая космическая: когда «слишком быстро» становится «навсегда»

Есть ещё один порог — вторая космическая скорость, скорость убегания. Она ровно в √2 (≈ 1.41) раза больше круговой:

vубегания = √2 · vкруговая

Для спутника вокруг Земли это 11.2 км/с вместо 7.9. Для планеты на месте Земли — 42.1 км/с вместо 29.8. Превысили — и тело уже никогда не вернётся: оно будет вечно тормозить, но всегда продолжит путь прочь. Именно поэтому в симуляции так весело жать «+ Тело» с большой скоростью: часть тел просто уплывает за горизонт и не возвращается.

Шпаргалка на три числа.

v меньше круговой → упадёт. v равна круговой → круг. Между круговой и 1.41·круговой → эллипс. 1.41·круговой и больше → прощай, Солнечная система. Вся орбитальная механика — это вариации на эти четыре строчки.

Вы вывели спутник на орбиту вокруг Земли и разогнали его ровно вдвое быстрее круговой скорости (v = 2·vкр). Что будет?

Как только поняли про скорости, остаётся один вопрос: как заставить компьютер честно просчитывать всё это миллионы раз в секунду? Ответ — в следующем разделе.

Раздел 4 · Метод

Как компьютер это считает

Компьютер не умеет «увидеть эллипс целиком». Он умеет делать одно: очень маленькие шажки. Из миллионов шажков и складывается орбита.

Всего четыре шага, и они повторяются без конца

Представьте, что вы ведёте машину с закрытыми глазами по команде штурмана. Штурман кричит: «прямо три метра!» — вы проехали три метра. Он снова посмотрел по сторонам и кричит новую команду. Чем короче команды, тем плавнее и точнее ваш путь. Это и есть численное интегрирование.

// то, что происходит в модели снова и снова for каждый кадр экрана: for 1200 мелких шажков: a = −G · M · r⃗ / |r⃗|³ // 1. как сильно сейчас тянет и куда v = v + a · dt // 2. чуть-чуть меняем скорость («пинок») r = r + v · dt // 3. чуть-чуть сдвигаем саму планету // 4. …и всё заново, уже из новой точки

Здесь dt («дэ-тэ») — размер шажка по времени. В нашей модели это 0.00025 года, около 2.2 часов реального времени. За один земной оборот планеты компьютер делает примерно 4000 таких шажков — и каждый раз заново спрашивает у физики «куда тянуть?».

Почему шажок должен быть маленьким (и хитрым)

Самый наивный способ — «посчитал ускорение, сдвинул позицию» — называется методом Эйлера. Он прост, но у него есть скверная привычка: каждый шажок добавляет системе чуточку лишней энергии, и планеты через тысячу оборотов улетают прочь. Ошибка сама по себе крошечная, но она складывается в одну сторону — как если бы вы каждый шаг отклонялись на полградуса вправо.

Поэтому в модели используется приём «кик — дрейф — кик»: скорость пинают на полшажка, двигают планету, пересчитывают тяготение в новой точке и добирают вторую половину пинка. Эта симметричность не даёт ошибке копиться: орбита может чуть «дрожать», но не расползается. В модели, которую вы открываете, энергия орбиты Земли не уходит даже за 200 лет — это проверено автотестами.

Поиграйте с размером шага

На картинке ниже идеальная окружность — это то, что даёт точная формула. Зелёная линия — то, как идёт наша схема «кик-дрейф-кик», розовая — наивный метод Эйлера. Двигайте ползунок: он меняет размер шажка dt.

идеальная окружность (точное решение) «кик-дрейф-кик» — наш метод в модели наивный Эйлера — энергия копится, орбита распухает

На маленьком шаге обе линии почти сливаются с идеальной. Увеличьте шаг — и увидите, как зелёная превращается в «многоугольник», а розовая начинает раскручиваться наружу. Тот же самый компромисс живёт в большой симуляции: когда вы выкручиваете «скорость времени» на максимум, шажки автоматически укрупняются, и орбиты становятся чуть грубее — ради того, чтобы всё оставалось плавным.

А почему просто не решить формулой?

Потому что формула «в лоб» есть только для двух тел: Солнце + одна планета. Как только тел три и больше, их взаимные притяжения сплетаются в задачу, у которой общего решения формулой не существует (это доказано ещё Пуанкаре). А у нас в модели восемь планет + Солнце + ваши самодельные тела. Остаётся один честный путь — считать шажками.

Побочный, но важный эффект.

Именно из-за «шаговости» симуляция оказывается живее любой формулы: вы можете посреди опыта поменять массу Солнца, столкнуть две планеты, добавить комету — и всё продолжит считаться само. Формула так не умеет, а интегратор умеет.

Что произойдёт, если сделать шаг интегрирования слишком большим?

Достаточно, чтобы понимать, что считается. Теперь можно заглянуть внутрь файла и разобрать его по частям — раздел «Разбор кода».

Раздел 5 · Внутренности

Разбор кода по частям

Файл simulation.html — это не каша из трёх тысяч строк. Он разложен на шесть блоков, и в каждом решается ровно одна задача. Узнаете блоки — сможете менять что угодно.

Как подсмотреть в код

Правой кнопкой по файлу → «Открыть с помощью» → Блокнот (или VS Code). Внутри всё размечено крупными заголовками вида РАЗДЕЛ 1 · ЕДИНИЦЫ И ДАННЫЕ. Ищите через Ctrl+F — и вы на месте. Бояться нечего: чтобы что-то сломать, надо очень постараться, а Ctrl+Z возвращает всё назад.

Шесть блоков файла

  1. Единицы и данные — числа и список планет. Здесь живут «кирпичики» Вселенной.
  2. Сцена — рендерер, камера, свет, звёздное небо. Чистая «киностудия».
  3. Солнце и планеты — создание шариков, следов, подписей и колец-орбит.
  4. Физика — те самые ускорение → скорость → позиция. Мозг симуляции.
  5. Интерфейс и камера — ползунки, кнопки, клик по планете, слежение камеры.
  6. Главный цикл — порядок «раз в кадр: посчитать, нарисовать».

Блок данных: из чего сделана планета

Каждая планета — одна строчка. Все свойства на виду, менять одно удовольствие:

const PLANETS = [ { name: 'Меркурий', a: 0.387, inc: 7.0, size: 0.155, color: 0xb8ab9b, mass: 1.66e-7 }, { name: 'Земля', a: 1.000, inc: 0.0, size: 0.26, color: 0x5aa9ff, mass: 3.00e-6 }, // …и так до Нептуна ];
ПолеЗа что отвечаетЕсли поменять
aРасстояние до Солнца в астрономических единицах (1 а.е. = путь света 8 минут)Планета встанет на другую орбиту и автоматически получит правильную скорость
incНаклонение орбиты в градусахОрбита наклонится — станет видно, что система не плоская, как блины
sizeВидимый размер шарика (в единицах экрана, а не в настоящих)Планета станет крупнее или меньше — на физику не влияет
colorЦвет шарика, следа и подписиПросто красиво
massМасса в массах СолнцаПланета начнёт сама чуть-чуть тянуть Солнце и соседей

Физика: девять строк, которые двигают все планеты

Функция accelerations — это закон Ньютона, переведённый на язык компьютеру. Для каждой пары тел она считает расстояние и тягу:

function accelerations(bodies, gm) { for (каждая пара тел i, j) { dx = b.pos[0] − a.pos[0]; dy = …; dz = …; // вектор «от одного к другому» r2 = dx*dx + dy*dy + dz*dz; // расстояние в квадрате r = √r2; k = gm / (r2 * r); // это G·M / r³, два шага в одном acc[i] += k * b.mass * (dx, dy, dz); // i тянется к j acc[j] -= k * a.mass * (dx, dy, dz); // а j — к i, закон 3-й Ньютона } }

Дальше integrate делает один шажок «кик-дрейф-кик», а advanceTime повторяет его столько раз, сколько нужно, чтобы промотать нужное время. Всё. Больше «физики» в файле нет.

Два «секретных» числа, которые стоит понимать.

GM_SUN = 4π² — это не магия, а удобная система единиц: если расстояние мерить в астрономических единицах, а время в годах, то для орбиты Земли получаем r = 1 и v = 2π ≈ 6.28. Команда круговой скорости тогда возвращает правильный ответ сама.
COMPRESS = 0.62 — сжатие дистанций для экрана. Настоящие расстояния в модели честные, а вот картинка подтягивает дальние орбиты ближе, иначе Нептун улетел бы за край.

Главный цикл: где «течёт время»

Этот блок — сердце. Он вызывается 60 раз в секунду и делает ровно две вещи: считает физику, потом рисует.

function animate() { requestAnimationFrame(animate); // «позови меня ещё раз в следующем кадре» const dtReal = clock.getDelta(); // сколько секунд прошло с прошлого кадра if (state.running) { const simYears = state.yearsPerSec * dtReal; // сколько лет модели промотать advanceTime(bodies, GM_SUN, simYears); // ← вся физика живёт здесь } updateVisuals(false); // переставляем шарики по новым числам controls.update(); // камера догоняет движение мыши renderer.render(scene, camera); // показать кадр }

Хотите, чтобы время шло в два раза быстрее по умолчанию? Найдите yearsPerSecond и поменяйте коэффициент. Хотите, чтобы модель «дышала» точнее? Уменьшите BASE_DT (станет медленнее) или увеличьте (станет быстрее, но грубее).

Камера: своя орбита вокруг выбранной точки

Библиотека Three.js умеет только рисовать. Управлять камерой приходится самим, поэтому в файле есть свой небольшой класс OrbitCam — три строчки подключения, внутри около сотни строк арифметики:

const controls = new OrbitCam(camera, renderer.domElement); controls.enableDamping = true; // инерция: камера мягко догоняет мышь controls.minDistance = 2.5; // не влетать в Солнце controls.maxDistance = 900; // не терять систему из виду

Каждый кадр controls.update() делает одно и то же: смотрит, где камера стоит относительно точки target, пересчитывает это в два угла и расстояние, добавляет повороты от мыши и обратно переводит в координаты. Плюс две маленькие функции: focusOn(номерТела) подлетает к планете, а followTarget() каждый кадр тащит камеру за выбранной планетой. Именно они делают эффект «я лечу за Сатурном».

Своего «контроллера» выбрали не из лени: так странице нужен один файл библиотеки вместо двух, а значит, меньше шансов, что при открытии что-то не докачается.

Как рождается стартовая орбита

Интересное место — planetSpec. Именно там планете выдаётся начальная скорость, и она берётся не «на глаз», а из формулы из третьего раздела:

const v0 = circularSpeed(GM_SUN * state.sunMass, r0) * speedFactor * dir; // circularSpeed(gm, r) = √(gm / r) — та самая круговая скорость // speedFactor = 1 → круг; 0.8 → эллипс; 1.5 → улетит // dir = 1 или −1 → летим по часовой или против

Карта: «я хочу…» → «смотреть сюда»

ХочуКуда смотреть
…добавить планету или передвинуть орбитумассив PLANETS (поле a)
…сделать планеты крупнее/мельчеполе size в PLANETS
…поменять силу тяжестиползунок «Масса Солнца» или state.sunMass
…изменить точность и скорость счётаBASE_DT, MAX_STEPS
…чтобы планеты не притягивали друг другав accelerations можно пропускать пары без Солнца
…поменять цвета, фон, свечениеglowTexture, starLayer, corona1/2 и CSS-переменные вверху файла
…убрать сжатие расстоянийCOMPRESS = 1 (и быть готовым к пустоте в середине)

Вы хотите, чтобы шарики планет стали крупнее на экране. Какое поле менять?

Теперь вы знаете, где что лежит, — и можно смело ломать Вселенную. Переходим к экспериментам.

Раздел 6 · Практика

Поэкспериментируй сам

Настоящее понимание появляется не тогда, когда прочитал, а когда предсказал — и ошибся. Ниже восемь опытов: сначала прочитайте, что именно делается, вслух предскажите результат, а потом раскройте подсказку и проверьте.

Опыт 1. Уменьшить массу Солнца до 0.3× (ползунок)

Что делаем: тянем ползунок «Масса Солнца» влево, до 0.30 ×.

Что произойдёт: почти все планеты сорвутся с круговых орбит и улетят по вытянутым эллипсам, часть — совсем. В правой панели у них появится период «не обращается — улетает».

Почему: скорости планет остались прежними, а нужная круговая скорость упала — она зависит от √M. Получился избыток скорости: там, где раньше был круг, теперь гипербола. Ровно тот же сюжет, что и с пушкой: слишком быстрое ядро уходит навсегда.

Опыт 2. Увеличить массу Солнца до 2.5× (ползунок)

Что делаем: тянем ползунок вправо.

Что произойдёт: орбиты сожмутся: планеты начнут то падать к Солнцу, то отскакивать назад — получатся очень вытянутые эллипсы. Меркурий и Венера при большом перевесе могут пересечь орбиты друг друга, а то и упасть на Солнце — тогда планета исчезнет.

Почему: тяготение выросло, а боковая скорость осталась прежней — её больше не хватает, чтобы «промахиваться». Численно новая большая полуось a′ = a/(2 − v²/GM′), то есть меньше прежней. Этот случай проверен автотестом: расхождение с теорией меньше 1%.

Опыт 3. Запустить своё тело (кнопка «+ Тело» или клавиша C)

Что делаем: нажимаем несколько раз. Каждое новое тело стартует по круговой орбите на случайном расстоянии, иногда в обратную сторону.

Что произойдёт: сначала — почти идеальная окружность. Потом след начнёт «гулять»: соседи тянут новенькую, и её орбита превращается в медленный узор. Тело, запущенное навстречу остальным, при сближении получает сильный пинок — иногда его выбрасывает из системы.

Почему: в модели честно считаются все пары тел, включая «планета — планета». Настоящая Солнечная система ведёт себя так же: именно по сбоям в движении Урана нашли Нептун.

Опыт 4. Разогнать Землю в 1.5 раза (одна строчка в коде)

Что делаем: в simulation.html ищем строку PLANETS.forEach((p, i) => addBody(planetSpec(p, i * GOLDEN))); и меняем её на:

PLANETS.forEach((p, i) => addBody(planetSpec(p, i * GOLDEN, p.name === 'Земля' ? 1.5 : 1)));

Что произойдёт: Земля перестанет обращаться вокруг Солнца — уйдёт прочь по открытой кривой, а след нарисует красивую дугу, которая никогда не замкнётся. Остальные планеты останутся на местах.

Почему: 1.5 больше √2 ≈ 1.41 — второй космической для этой точки. Скорость превысила скорость убегания.

Опыт 5. Сделать шаг интегрирования грубым (BASE_DT)

Что делаем: находим const BASE_DT = 0.00025; и ставим 0.0025; — шаг крупнее в десять раз.

Что произойдёт: следы планет станут заметного «полигональными», а орбита Меркурия — самого быстрого — начнёт заметно дрейфовать и может превратиться в петляющую звезду.

Почему: шага в 22 дня Меркурию много: за это время он пролетает приличную дугу, а компьютер всё это время считает, что тяга была прежней. Хотите точности — поставьте 0.00005: считать станет медленнее, зато след снова станет гладким.

Опыт 6. Вернуть настоящие расстояния (COMPRESS)

Что делаем: const COMPRESS = 0.62; → const COMPRESS = 1;

Что произойдёт: внутренняя Солнечная система сожмётся в яркую точку у самого Солнца, а различимы останутся только гиганты. Придётся постоянно пользоваться колесом мыши.

Почему: это и есть настоящие пропорции. Модель была нарядной именно потому, что мы слегка соврали про расстояния — и это честная, осознанная ложь визуализации.

Опыт 7. Поселить два тела на одной орбите

Что делаем: скопируйте в PLANETS строчку Земли, переименуйте её в «Земля-2», оставив a: 1.000.

Что произойдёт: тела начнут тянуть друг друга: догоняющая тормозит и отстаёт, та, что впереди, ускоряется и уходит вперёд. Долго так не живёт — орбиты расходятся.

Почему: устойчиво это только в особых точках — когда тела разнесены примерно на 60° по орбите (точки Лагранжа L4 и L5). Так живут «троянцы» Юпитера: тысячи астероидов, которые делят с планетой одну орбиту и не падают на неё.

Опыт 8. Проверить сохранение энергии

Что делаем: ставим паузу, выбираем Землю, запоминаем скорость и расстояние. Прокрутим 20 лет, снова пауза, сравниваем: показания не должны уйти.

Что произойдёт: период обращения останется тем же с точностью до долей процента.

Почему: метод «кик-дрейф-кик» почти не добавляет и не теряет энергию — это его главное свойство. На нём держится жизнь таких моделей: их можно считать миллиарды лет, и они не разваливаются.

Как выжать из опытов максимум.

Правило простое: сначала предсказание, потом кнопка. Сказали вслух «сейчас будет так» — нажали. Совпало — знание закрепилось. Не совпало — прекрасно: теперь у вас есть настоящий вопрос, а он стоит дороже правильного ответа.

Раздел 7 · Маршрут

Что дальше

Вы уже знаете больше, чем кажется: понимаете, откуда берутся орбиты, зачем нужна скорость, как компьютер обманывает бесконечность маленькими шажками и где в файле лежит каждая ручка. Дальше — карта, куда расти.

Что у вас уже есть в голове

Словарь, который откроет следующие двери

Эти слова встречаются в любой статье про орбиты. Зная их, вы перестанете спотыкаться о текст.

Эксцентриситет (e)

Насколько эллипс вытянут: 0 — идеальный круг, 0.9 — очень вытянутый. У Земли 0.017, у кометы Галлея 0.97.

Законы Кеплера

Три правила, которые Ньютон потом вывел из своего закона: эллипсы, «равные площади за равное время», T² ∝ a³.

Vis-viva

Формула-связка: скорость, расстояние и размер орбиты в одной строчке. Ею пользуются, чтобы быстро прикинуть «что будет, если разогнать».

Энергия орбиты

Отрицательная у тех, кто привязан, и равная нулю у тех, кто убегает. «Потенциальная яма» — лучший способ думать о тяготении.

Сфера Хилла

Область, где планета главная: внутри неё её спутники живут своей жизнью, снаружи командует Солнце.

Точки Лагранжа

Пять «карманов» между двумя телами, где можно зависнуть и лететь вместе с планетой. Там стоят обсерватории.

Гравитационный манёвр

Пролёт мимо планеты, который даёт аппарату скорость «в подарок», без грамма топлива. Так долетают до внешних планет.

Резонанс

Когда периоды обращения относятся как простые числа (2:1, 3:2) — и орбиты начинают «держать» друг друга.

Задача N тел и хаос

Почему орбиты нельзя предсказать на миллиард лет вперёд: малое различие в начале растёт экспоненциально.

Симплектические интеграторы

Семейство методов (включая наш «кик-дрейф-кик»), которые берегут энергию на длинных дистанциях.

Пост-ньютоновская поправка

Меркурий немного «прецессирует» — это заметила Общая теория относительности. Первая трещинка в ньютоновской картине.

Сфера влияния и сближения

Инструменты реальных расчётов полётов: где заканчивается Земля и начинается Марс в смысле тяготения.

Как усложнять этот же проект (по порядку сил)

  1. Эллиптические орбиты «как в настоящем». Вместо круговой скорости выдать планете скорость с учётом эксцентриситета (формула vis-viva делает это в одну строку).
  2. Спутники. Дайте Земле Луну — и посмотрите, удержит ли она её рядом с Солнцем (спойлер: да, если не запускать слишком далеко).
  3. Столкновения. Сейчас тела проходят друг сквозь друга. Добавьте проверку расстояния и сливайте их, сохраняя импульс — получится «теория гигантского столкновения» о рождении Луны.
  4. Кометы с хвостом. Хвост всегда смотрит от Солнца — отличная тренировка рисовать направление по вектору.
  5. Настоящее свечение. Постобработка (bloom) сделает Солнце по-настоящему ослепительным.
  6. Текстуры и освещённость. Картинки поверхностей плюс честная граница дня и ночи — и модель становится «космическим фото».
  7. Точная стартовая позиция из реальных данных — тогда модель можно сравнивать с настоящим положением планет.
  8. Релятивистская поправка — одна дополнительная строчка в ускорении, и перигелий Меркурия начнёт ползти так, как в природе.

Где играть и смотреть дальше

Universe Sandbox

Настоящая песочница: сталкивайте планеты, меняйте массу звёзд, смотрите на климат. Очень близко к тому, что вы уже умеете.

Kerbal Space Program

Лучший учебник орбитальной механики, какой придумали. После него формулы становятся очевидными.

«My Solar System» (PhET)

Крошечная браузерная n-body-песочница: четыре шарика и те же эффекты, что вы видели в нашей модели.

SpaceEngine

Прогулка по масштабной Вселенной — чтобы поймать ощущение настоящих расстояний.

3Blue1Brown

Визуальные объяснения векторов, производных и дифференциальных уравнений — ровно той математики, что стоит за симуляцией.

MIT OCW 8.01

Бесплатный полный курс механики. Первые лекции теперь будут читаться легко.

Математика, которая быстрее всего окупится

  1. Векторы — это просто «стрелка: куда и насколько». Вся наша физика написана векторами, и без них шага не сделать.
  2. Производная = «как быстро меняется». Скорость — производная позиции, ускорение — производная скорости. После этого формулы перестают быть заклинаниями.
  3. Интеграл = «сложить много маленьких» — это и есть то, что делает компьютер шажками.
  4. Законы сохранения (энергия, импульс, момент импульса) — самый дешёвый способ предсказать результат, не считая ничего.
  5. Дифференциальные уравнения — язык, на котором природа описывает «как меняется». Орбита — первое и самое красивое пример.
  6. Численные методы: Эйлера, Рунге–Кутты, симплектические схемы — и понимание, когда чему доверять.
И соседняя дверь: программирование.

Те же опыты полезно переделать на Python с numpy и matplotlib: там вы увидите то же самое в цифрах и графиках, зато без единого пикселя. А если захочется красоты — Three.js: вы уже знаете достаточно, чтобы читать его примеры.

Итоговая проверка. Что произойдёт с орбитой Земли, если Солнце в модели сделать вдвое тяжелее, а скорость Земли оставить прежней?

Всё, что вы прочитали, можно потрогать

Откройте симуляцию и пройдите по разделам сверху вниз: масса Солнца, «+ Тело», грубый шаг, клик по планете. Десять минут с мышью закрепят больше, чем ещё десять страниц.

🚀 Открыть симуляцию