물리 · 삼체 궤도

세 천체의 궤도는 왜 좀처럼 반복되지 않을까

규칙

같은 질량 세 개, 오직 중력뿐. 거의 모든 궤도가 무너지지만, 아주 드물게 몇몇은 영원히 반복돼요.

클릭하면 YouTube에서 재생돼요.

왜 이렇게 될까

중력을 받는 두 천체는 같은 타원을 따라 영원히 서로를 돌아요. 같은 질량의 세 번째 천체를 더하면 거의 모든 출발이 뒤엉킴으로 끝나고, 보통 한 천체가 튕겨 나가요. 그런데 아주 드물게 몇몇 출발은 제자리로 돌아와 반복돼요. 8자 궤도처럼요.

aᵢ = G · Σⱼ≠ᵢ mⱼ · (rⱼ − rᵢ) ÷ |rⱼ − rᵢ|³8자 궤도: 같은 질량 세 개, 전체 각운동량 0

직접 만들기

Python 3 · numpy · matplotlib

발표된 초깃값에서 출발한 8자 궤도를 작은 립프로그 단계로 세 주기 동안 계산.

three-body-orbits.py
"""Three bodies: the figure-eight orbit, from the starting values computed by Carles Simo
(in Chenciner and Montgomery, 2000). G = 1, three masses of 1.
Run: python three-body-orbits.py   (needs: pip install numpy matplotlib)
"""
import numpy as np
import matplotlib.pyplot as plt

plt.style.use("dark_background")

x1 = np.array([0.97000436, -0.24308753])
V = np.array([-0.93240737, -0.86473146])  # the velocity of body 3
pos = np.array([x1, -x1, [0.0, 0.0]])
vel = np.array([-V / 2, -V / 2, V])
period, dt = 6.32591398, 0.0005
turn = 0  # degrees to turn the first velocity by (the film breaks the eight with 15)

a = np.radians(turn)
vel[0] = [vel[0, 0] * np.cos(a) - vel[0, 1] * np.sin(a), vel[0, 0] * np.sin(a) + vel[0, 1] * np.cos(a)]


def pull(p):
    """Each body's acceleration: the sum of the other two's gravity, G*m / r**2 towards each"""
    acc = np.zeros_like(p)
    for i in range(3):
        for j in range(3):
            if i != j:
                d = p[j] - p[i]
                acc[i] += d / np.linalg.norm(d) ** 3
    return acc


track = []
acc = pull(pos)
for _ in range(int(3 * period / dt)):  # three periods, leapfrog steps (they keep the energy well)
    vel += acc * dt / 2
    pos += vel * dt
    acc = pull(pos)
    vel += acc * dt / 2
    track.append(pos.copy())
track = np.array(track)

colours = ["#5eead4", "#f0abfc", "#f5c76b"]
plt.figure(figsize=(7, 4))
for body in range(3):  # all three run along the same track, a third of a period apart
    plt.plot(track[:, body, 0], track[:, body, 1], color=colours[body], linewidth=1)
plt.scatter(track[-1, :, 0], track[-1, :, 1], c=colours, s=80, zorder=3)
plt.axis("equal")
plt.axis("off")
plt.show()

# Try: turn = 15 -> the three tracks no longer close; the eight falls apart

해 보기: 영상처럼 turn = 15로 바꿔 보세요. 세 궤적이 더 이상 닫히지 않아요.

이 스크립트를 한 줄씩, 연습 문제와 퀴즈로 배우기 → · Google Colab에서 실행 (영어) →

영상이 들려주는 수학

영상 노트 보기 (YouTube에서, 영어)

Three equal masses pull on each other with nothing but Newton's gravity. For two bodies the motion is an ellipse, forever; for three there is no formula at all, and almost every start ends in a tangle — one body is usually flung away. Yet a handful of starting conditions close on themselves exactly.

The first act is the figure-eight, found numerically by Cris Moore in 1993 and proved to exist by Chenciner and Montgomery in 2000: three bodies chasing each other around one figure-eight track, always equally spaced in time. Then one body's velocity is nudged by 15 degrees. Nothing else changes, but the orbit is unstable to that nudge, so within seconds the ballet becomes chaos — and that is the normal state of three bodies.

From the chaos the film gathers them into two more of the periodic solutions catalogued by Šuvakov and Dmitrašinović in 2013, the "moth" and the "yin-yang", each broken again by the same nudge, before the figure-eight returns. Everything is integrated with an adaptive 8th-order method at relative tolerance 1e-9; the periodic orbits were checked to return to their starting state to about one part in a thousand after one period. The small white dot is the centre of mass — it never moves, because the total momentum is zero.

출처: 다음 영상의 설명 Three-Body Problem: The Rare Orbits That Never Break (영어).

Shorts

출처