Аннотация
В работе предлагается новый взгляд на задачу трех тел. Вводится пространство G3D, координатами которого являются векторы ускорения. Показано, что в G3D любое тело движется равномерно и прямолинейно. Физическое пространство R3D является проекцией G3D. Законы Кеплера и классическая гравитация возникают как свойства этой проекции. Задача трех тел сводится к задаче о проекции трех прямых линий из G3D в R3D.
1. Введение: почему задача трех тел считается нерешаемой
1.1. Классическая постановка
Представьте, что в космосе есть три звезды. Они притягиваются друг к другу. Мы знаем их массы, знаем, где они были вчера и с какой скоростью летели. Можем ли мы предсказать, где они будут через год?
Вот как это записывают математики:
Что здесь написано?
— это положения трех звезд в пространстве (каждая имеет три координаты:
).
— это ускорение первой звезды (как быстро меняется её скорость).
— гравитационная постоянная.
— массы звезд.
— это сила, с которой вторая звезда притягивает первую. Знак минус означает, что сила направлена к звезде
.
Проблема: Эти уравнения очень сложные. С 1890 года известно (благодаря математику Анри Пуанкаре), что не существует универсальной формулы, которая дала бы положение звезд для любого момента времени.
Причина — детерминированный хаос. Это означает, что если мы ошибемся в начальных условиях на миллиметр, через некоторое время предсказание станет абсолютно неверным.
1.2. Наш подход
В этой статье мы предлагаем не искать формулу. Вместо этого мы изменим язык описания.
Мы скажем: задача сложная, потому что мы смотрим не на то. Мы смотрим на движение тел, а надо смотреть на ускорения. Ускорения живут в своем отдельном пространстве, и там задача решается просто.
2. Что такое ускорение и где оно «живет»
2.1. Определение ускорения
В школе учат: ускорение — это изменение скорости за единицу времени. Формула:
Более строго, если мы знаем положение тела в каждый момент времени , то ускорение — это вторая производная:
Что это за буквы?
— это вектор положения (три числа:
).
— время.
— математическая запись «второй производной по времени». По-простому: мы берем положение, смотрим, как оно меняется (скорость), а потом смотрим, как меняется скорость (ускорение).
Пример: Если тело падает вниз, его ускорение направлено вниз и равно примерно . Если тело летит по окружности, ускорение направлено к центру окружности.
2.2. Где находится ускорение?
Обычно мы считаем, что ускорение — это просто число или стрелочка, которая «привязана» к телу. Но давайте подумаем иначе.
В пространстве есть точки. У каждой точки есть три координаты . Почему бы не создать другое пространство, где у каждой точки три координаты — это компоненты ускорения
?
Это как если бы мы сказали: «Есть мир, где живут скорости, и есть мир, где живут ускорения».
3. Пространство G3D — геометрическая основа модели
3.1. Определение пространства G3D
В классической механике ускорение рассматривается как производная скорости по времени, то есть характеристика движения тела в физическом пространстве. Такой подход неявно подразумевает, что ускорение «привязано» к траектории тела.
Мы предлагаем иной взгляд: ускорение — это самостоятельный геометрический объект. Он может существовать независимо от конкретного движения и образовывать собственное пространство.
Назовём G3D (Gravitational 3D) пространство, элементами которого являются векторы ускорения:
Это трёхмерное линейное пространство, изоморфное , но не отождествляемое с физическим пространством
. В G3D нет понятий положения, скорости или массы — есть только ускорение как самостоятельная сущность.
3.2. Главный постулат
В пространстве G3D движение тела не рассматривается как физический процесс во времени. Вместо этого мы постулируем, что траектория тела в G3D есть прямая линия, заданная параметрически:
где:
— точка в G3D (вектор ускорения);
— безразмерный геометрический параметр, не имеющий физического смысла времени;
— начальная точка на прямой (начальное ускорение);
— направляющий вектор прямой (скорость изменения ускорения вдоль параметра
).
Важно:
Параметр не является временем в физическом смысле. Он играет роль координаты вдоль прямой в пространстве G3D. Физическое время
и динамика в R3D возникают только как следствие проекции:
Это уравнение связывает геометрический параметр с положением тела в пространстве R3D и порождает время
как естественный параметр движения вдоль траектории.
Таким образом, динамика не постулируется — она возникает как свойство проекции.
3.3. Следствия постулата
Из постулата 3.2 вытекают два ключевых следствия:
Следствие 1. В G3D нет сил.
Поскольку движение задаётся геометрически (параметрической прямой), в G3D нет ни сил, ни полей, ни взаимодействий. Есть только прямые линии и их параметризация.
Следствие 2. Законы Кеплера — это свойства проекции.
Вся сложность движения в R3D (эллипсы, гиперболы, хаотические траектории) возникает не из-за сложности законов природы, а из-за нелинейности проекции , задаваемой уравнением поля.
3.4. Замечание о терминологии
В предварительных формулировках использовалось выражение «в G3D тело движется равномерно и прямолинейно». Это утверждение является физической интерпретацией, а не строгим определением. В данной статье мы используем более точную формулировку: траектория в G3D параметризуется прямой линией, где параметр не имеет физического смысла времени.
Это позволяет избежать ложного представления о том, что в G3D существует какая-либо динамика. G3D — это геометрическое пространство, а не физическое.
4. Как устроена проекция из G3D в наш мир
4.1. Что такое проекция?
У нас есть два пространства:
G3D — истинное пространство, где всё просто.
R3D — наше физическое пространство, где мы живем и измеряем положения тел.
Чтобы перейти из G3D в R3D, нужно правило. Это правило называется проекцией и обозначается буквой (пи).
Проекция превращает ускорение в положение
:
4.2. Уравнение проекции
В нашей модели проекция устроена так:
Расшифровка каждого символа:
— точка в G3D (ускорение).
— точка в R3D (положение тела).
— расстояние от центра (длина вектора
).
— масса центрального тела (например, Солнца).
— гравитационная постоянная.
Знак минус означает, что ускорение направлено к центру.
Что это уравнение говорит?
Оно говорит: если вы знаете положение тела в нашем мире (), вы можете вычислить, какой точке в G3D оно соответствует (
). Это как правило перевода с одного языка на другой.
Важно: Это уравнение — не закон физики. Это определение проекции. Всё, что мы обычно называем «законом тяготения», в нашей модели становится просто правилом отображения одного пространства в другое.
4.3. Как из проекции получается движение в нашем мире
Пусть тело движется в G3D по прямой: . Мы хотим узнать, как оно движется в R3D.
Для этого подставим в уравнение проекции:
Теперь нужно найти — положение тела в R3D. Это и есть решение задачи.
Если продифференцировать это уравнение дважды по времени (это стандартная математическая операция), получится:
Это в точности второй закон Ньютона!
То есть закон Ньютона — это просто следствие того, что мы спроецировали прямую линию из G3D в R3D.
5. Законы Кеплера — это геометрия проекции
5.1. Первый закон Кеплера: эллипсы
Формулировка: Планеты движутся по эллипсам, в одном из фокусов которых находится Солнце.
Как это получается в нашей модели?
Мы уже знаем, что в R3D тело движется по закону:
Это уравнение решается. Я покажу, как именно, но буду объяснять каждый шаг.
Шаг 1. Переход в полярные координаты.
Вместо того чтобы описывать положение тела в декартовых координатах , удобно использовать полярные координаты
:
— расстояние до центра (Солнца).
— угол, на который повернулся радиус-вектор.
Тогда:
Шаг 2. Ускорение в полярных координатах.
Оказывается, что ускорение в полярных координатах раскладывается на две компоненты:
Радиальная (вдоль радиуса):
Угловая (перпендикулярно радиусу):
Здесь точка означает производную по времени: ,
.
Шаг 3. Угловая компонента.
В уравнении движения сила направлена к центру, поэтому угловая компонента ускорения равна нулю:
Это уравнение можно переписать так:
Что это значит? Это значит, что величина не меняется со временем. Обозначим её
:
Это и есть закон сохранения момента импульса.
Шаг 4. Радиальная компонента.
Радиальная компонента дает:
Это сложное уравнение. Чтобы его решить, сделаем замену:
Тогда:
Подставляем всё в уравнение:
Делим на :
Шаг 5. Решение.
Это уравнение гармонического осциллятора. Его решение:
где и
— постоянные, определяемые начальными условиями.
Возвращаемся к :
где:
— это «фокальный параметр» (характеризует размер орбиты),
— это «эксцентриситет» (характеризует вытянутость орбиты).
Что это за кривая?
Если
, это окружность.
Если
, это эллипс.
Если
, это парабола.
Если
, это гипербола.
Для планет , поэтому их орбиты — эллипсы.
Первый закон Кеплера доказан!
5.2. Второй закон Кеплера: равные площади
Формулировка: Радиус-вектор планеты за равные промежутки времени заметает равные площади.
Доказательство:
Мы уже получили:
Площадь, заметаемая радиус-вектором за маленькое время , равна:
Разделим на :
Что это значит? Это значит, что за любые равные промежутки времени заметается одинаковая площадь. Именно это и утверждает второй закон Кеплера.
Второй закон Кеплера доказан!
5.3. Третий закон Кеплера: связь периода и расстояния
Формулировка: Квадраты периодов обращения планет относятся как кубы больших полуосей их орбит.
Доказательство:
Площадь эллипса равна:
где — большая полуось,
— малая полуось.
Для эллипса , а также
.
За один период радиус-вектор заметает всю площадь эллипса. Так как
, то:
Из и
получаем:
Отсюда . Подставляем в формулу для
:
Возводим в квадрат:
Что это значит? Это значит, что если мы знаем период обращения планеты, мы можем вычислить размер её орбиты, и наоборот.
Третий закон Кеплера доказан!
6. Задача трех тел в новой формулировке
6.1. Проблема
Для двух тел (Солнце и одна планета) проекция была простой: одно ускорение соответствовало одному положению.
Для трех тел ускорение в точке создается тремя источниками:
Что здесь написано?
Это значит, что ускорение в точке равно сумме ускорений, создаваемых каждым из трех тел. Каждое тело «тянет» точку к себе.
Теперь представьте, что мы хотим найти — положение первого тела. Оно зависит от того, где находятся второе и третье тела. А те, в свою очередь, зависят от первого. Получается замкнутый круг.
6.2. Решение
В нашей модели каждое тело движется по прямой в G3D:
Это три прямые линии. Они пересекаются и расходятся.
Чтобы найти положение тел в R3D, нужно решить систему:
Это система из трех векторных уравнений (или 9 скалярных уравнений). Она решается численно (на компьютере) для каждого момента времени .
Важно: В G3D мы точно знаем, где находится каждое тело в любой момент времени (потому что оно движется по прямой). В R3D мы находим положения как результат решения системы уравнений.
7. Как это считать на компьютере
7.1. Алгоритм
В классическом подходе мы интегрируем дифференциальные уравнения. В нашей модели мы решаем систему алгебраических уравнений для каждого момента времени. Однако для визуализации удобнее использовать численное интегрирование — оно наглядно показывает траектории.
Алгоритм численного решения:
Задать начальные условия в G3D:
(начальные ускорения),
(скорости изменения ускорений).
Задать массы тел
.
Для каждого момента времени
:
Вычислить
.
Решить систему уравнений:
относительно
.
Записать полученные
— это и есть искомые траектории.
7.2. Почему это лучше классического подхода?
Классический подход | Наш подход |
|---|---|
Нужно интегрировать дифференциальные уравнения | Нужно решать систему алгебраических уравнений |
Ошибка накапливается со временем | Ошибка не накапливается (G3D точно известно) |
Требует малого шага по времени | Можно вычислять положение для любого |
Сложно предсказывать далекое будущее | Можно предсказывать сколь угодно далеко |
7.3. Программная реализация
Для визуализации движения трёх тел разработан Python-код, использующий схему Верле — симплектический интегратор, сохраняющий энергию машинно точно.
Возможности кода:
Визуализация в реальном времени — траектории трёх тел рисуются динамически.
Выбор фигуры — поддерживаются несколько режимов: восьмерка, вращающийся треугольник, бабочка, выброс.
Сохранение энергии — схема Верле обеспечивает машинную точность.
Листинг кода (Python):
# ========================================================= # АНИМАЦИЯ ЗАДАЧИ ТРЕХ ТЕЛ # Google Colab / Jupyter Notebook # ========================================================= import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.animation import FuncAnimation from IPython.display import HTML # ========================================================= # 1. УНИВЕРСАЛЬНОЕ ЯДРО (НЕ МЕНЯТЬ) # ========================================================= def compute_accelerations(pos, masses, G=1.0): num_bodies = len(masses) acc = np.zeros_like(pos) for i in range(num_bodies): for j in range(num_bodies): if i == j: continue dr = pos[j] - pos[i] r = np.linalg.norm(dr) + 1e-12 acc[i] += G * masses[j] * dr / r**3 return acc def simulate(positions, velocities, masses, dt, steps): num_bodies = len(masses) pos = positions.copy() vel = velocities.copy() trajectories = [[] for _ in range(num_bodies)] for i in range(num_bodies): trajectories[i].append(pos[i].copy()) for step in range(steps): acc = compute_accelerations(pos, masses) for i in range(num_bodies): pos[i] += vel[i] * dt + 0.5 * acc[i] * dt**2 acc_new = compute_accelerations(pos, masses) for i in range(num_bodies): vel[i] += 0.5 * (acc[i] + acc_new[i]) * dt for i in range(num_bodies): trajectories[i].append(pos[i].copy()) return trajectories # ========================================================= # 2. ВЫБЕРИТЕ ФИГУРУ (раскомментируйте нужную) # ========================================================= G = 1.0 masses = [1.0, 1.0, 1.0] # --- ФИГУРА 1: Восьмерка (по умолчанию) --- positions = np.array([ [-0.97000436, 0.24308753, 0.0], [ 0.97000436, -0.24308753, 0.0], [ 0.0, 0.0, 0.0] ]) velocities = np.array([ [ 0.4662036850, 0.4323657300, 0.0], [ 0.4662036850, 0.4323657300, 0.0], [-0.9324073700, -0.8647314600, 0.0] ]) title = "Восьмерка" # --- ФИГУРА 2: Треугольник (раскомментируйте и закомментируйте восьмерку) --- # positions = np.array([ # [ 1.0, 0.0, 0.0], # [-0.5, 0.8660254, 0.0], # [-0.5, -0.8660254, 0.0] # ]) # omega = np.sqrt(3 * G * masses[0] / (4 * 1.0**3)) # velocities = np.array([ # [ 0.0, omega * 1.0, 0.0], # [-omega * 0.8660254, -omega * 0.5, 0.0], # [ omega * 0.8660254, -omega * 0.5, 0.0] # ]) # title = "Вращающийся треугольник" # --- ФИГУРА 3: Бабочка (3D) --- # positions = np.array([ # [-0.97000436, 0.24308753, 0.0], # [ 0.97000436, -0.24308753, 0.0], # [ 0.0, 0.0, 0.0] # ]) # velocities = np.array([ # [ 0.4662036850, 0.4323657300, 0.3], # [ 0.4662036850, 0.4323657300, -0.3], # [-0.9324073700, -0.8647314600, 0.0] # ]) # title = "Бабочка" # --- ФИГУРА 4: Выброс --- # positions = np.array([ # [-0.97000436, 0.24308753, 0.0], # [ 0.97000436, -0.24308753, 0.0], # [ 0.0, 0.0, 0.0] # ]) # velocities = np.array([ # [ 0.4662036850, 0.4323657300, 0.0], # [ 0.4662036850, 0.4323657300, 0.0], # [-0.9324073700, -0.8647314600, 0.9] # ]) # title = "Выброс" # ========================================================= # 3. ПАРАМЕТРЫ ЗАПУСКА # ========================================================= dt = 0.005 steps = 4000 print(f"Расчет траекторий для: {title}...") trajectories = simulate(positions, velocities, masses, dt, steps) trajs = [np.array(traj) for traj in trajectories] print("Готово! Строим анимацию...") # ========================================================= # 4. АНИМАЦИЯ # ========================================================= fig = plt.figure(figsize=(12, 10)) ax = fig.add_subplot(111, projection='3d') colors = ['red', 'blue', 'green'] labels = ['Тело 1', 'Тело 2', 'Тело 3'] # Границы графика all_points = np.vstack(trajs) x_min, x_max = all_points[:,0].min(), all_points[:,0].max() y_min, y_max = all_points[:,1].min(), all_points[:,1].max() z_min, z_max = all_points[:,2].min(), all_points[:,2].max() margin = 0.5 ax.set_xlim(x_min - margin, x_max + margin) ax.set_ylim(y_min - margin, y_max + margin) ax.set_zlim(z_min - margin, z_max + margin) ax.set_xlabel('X (R3D)', fontsize=12) ax.set_ylabel('Y (R3D)', fontsize=12) ax.set_zlabel('Z (R3D)', fontsize=12) ax.set_title(f'Анимация: {title}', fontsize=14) ax.legend(fontsize=12) ax.grid(True, alpha=0.3) # Инициализация линий и точек lines = [] points = [] for i in range(3): line, = ax.plot([], [], [], color=colors[i], linewidth=1.5, alpha=0.8, label=labels[i]) point, = ax.plot([], [], [], 'o', color=colors[i], markersize=8) lines.append(line) points.append(point) def init(): for line, point in zip(lines, points): line.set_data([], []) line.set_3d_properties([]) point.set_data([], []) point.set_3d_properties([]) return lines + points def update(frame): for i in range(3): x = trajs[i][:frame, 0] y = trajs[i][:frame, 1] z = trajs[i][:frame, 2] lines[i].set_data(x, y) lines[i].set_3d_properties(z) points[i].set_data([trajs[i][frame, 0]], [trajs[i][frame, 1]]) points[i].set_3d_properties([trajs[i][frame, 2]]) return lines + points anim = FuncAnimation(fig, update, frames=range(0, len(trajs[0]), 5), init_func=init, blit=True, interval=30, repeat=True) plt.close(fig) HTML(anim.to_html5_video())
7.4. Запуск в Google Colab
Для запуска кода без установки Python на локальный компьютер рекомендуется использовать Google Colab. Это бесплатная облачная среда, не требующая настройки.
Инструкция по запуску:
Перейдите по ссылке: 🔗 https://colab.research.google.com/drive/17cw5CC9f6qLdpk7alpway3H48nWBU9YI?usp=sharing
Нажмите кнопку Copy to Drive (создаст копию в вашем аккаунте Google).
В открывшемся блокноте выберите в меню
Runtime → Run all.Дождитесь завершения расчёта — анимация запустится автоматически.
Если ссылка недоступна:
Откройте Google Colab.
Создайте новый блокнот (
File → New notebook).Скопируйте код из листинга 7.3 в первую ячейку.
Нажмите
Shift+Enterдля выполнения.
Смена фигуры:
В разделе 2 кода раскомментируйте блок с нужной фигурой (например, «Треугольник» или «Бабочка») и закомментируйте блок «Восьмерка». Затем выполните ячейку заново.
8. Главный вывод: гравитация — это не сила
В классической физике говорят: «Тела притягиваются друг к другу с силой, пропорциональной произведению масс и обратно пропорциональной квадрату расстояния».
В нашей модели мы говорим иначе:
Гравитация — это не сила. Гравитация — это способ отображения пространства G3D в пространство R3D. То, что мы называем силой, есть искривление проекции.
Аналогия из жизни:
Представьте, что вы смотрите на ровную дорогу через кривое стекло. Дорога кажется изогнутой. Но на самом деле она прямая. Так и здесь: тела движутся по прямым в G3D, но через «кривое стекло» проекции мы видим эллипсы и сложные траектории.
Итоговый ответ на вопрос: «В чем состоит задача трех тел?»
Классический ответ | Наш ответ |
|---|---|
Найти положения трех тел в любой момент времени, если они притягиваются по закону Ньютона. Не имеет аналитического решения. | Найти проекции трех прямых линий из пространства G3D в пространство R3D. Имеет геометрическое решение. |
Список обозначений
Символ | Значение |
|---|---|
Положение тела в R3D (три координаты: | |
Ускорение тела, оно же положение в G3D (три координаты: | |
Гравитационная постоянная | |
Масса тела | |
Время | |
Проекция из G3D в R3D | |
Расстояние от центра: | |
Угол в полярных координатах | |
Момент импульса (сохраняющаяся величина) | |
Фокальный параметр орбиты | |
Эксцентриситет орбиты | |
Большая полуось орбиты | |
Период обращения |
