← 실계산 조각
Barnes·Hut quadtree · leapfrog · O(N log N) · 라이브러리 0

5,000개가 서로를 당긴다

화면의 별 하나하나가 나머지 전부의 중력을 느낍니다. 정직하게 계산하면 매 프레임 2,500만 번의 만유인력 계산이 필요하지만, 이 페이지는 우주를 사분면으로 쪼개 멀리 있는 별 무리를 질량중심 하나로 뭉뚱그리는 Barnes·Hut 트리로 수십만 번에 끝냅니다. 은하 두 개를 충돌시켜 보세요. 조석 꼬리가 뽑혀 나옵니다. 안테나 은하가 그렇게 생겼습니다.

누르고 있으면 그 자리에 중력 우물이 생깁니다

우주 제어

θ가 작을수록 정확하지만 느립니다(θ=0이면 사실상 전수 계산). 우측 상단의 연산 횟수가 θ에 따라 어떻게 변하는지 보세요. 천문학 시뮬레이션이 실제로 이 눈금 하나로 정확도와 속도를 흥정합니다.

풀고 있는 방정식

F = G m₁m₂ / (r² + ε²)  만유인력 + 소프트닝 ε(근접 폭발 방지)
멀리 있는 무리: 별 k개 → 질량중심 1개로 근사, 조건 (셀 크기 / 거리) < θ  Barnes·Hut(1986). O(N²) → O(N log N)
v½ = v + a·dt/2 → x += v½·dt → v = v½ + a′·dt/2  leapfrog. 에너지가 새지 않아 궤도가 수만 스텝을 버틴다

우주의 계산법 · 4가지

① 먼 무리는 하나로 친다 — 쿼드트리 근사를 실제로 돌린 것 θ = 0.6 · 예시로 별 400개

노란 별 하나가 나머지 전부의 힘을 구할 때, 초록 칸은 그 안의 별들을 질량중심 하나로 뭉쳐 셈한 곳입니다. 가까운 곳만 낱낱이 내려갑니다. 숫자는 이 400개 예시에서 실제로 센 것입니다.

COSMOS 1

쿼드트리 근사

별 5,000개의 전수 계산은 매 프레임 2,500만 회. 우주를 사분면으로 재귀 분할하고, 멀리 있는 셀은 그 안의 별 전부를 질량중심 하나로 칩니다. 정확도 θ 하나로 손실을 제어합니다.

if (셀크기/거리 < θ)
  질량중심 하나로 계산  // 근사
else 네 자식 셀로 내려간다
COSMOS 2

새지 않는 적분

오일러 적분은 궤도가 조금씩 부풀다 터집니다. leapfrog는 시간 대칭이라 에너지 오차가 누적되지 않고 진동만 합니다. 행성 궤도를 수만 년 돌리는 천문학 코드가 전부 이 계열입니다.

v += a·dt/2   // kick
x += v·dt     // drift
a = 힘(x)/m
v += a·dt/2   // kick
COSMOS 3

회전 곡선

은하가 흩어지지 않는 건 각 별이 자기 반지름 안쪽 질량에 맞는 속도로 공전하기 때문입니다. v = √(GM(r)/r). 이 초기 조건이 틀리면 은하는 몇 바퀴 안에 붕괴하거나 흩어집니다.

M(r) = 중심핵 + 안쪽 원반 질량
v_circ = sqrt(G·M(r)/r)
// 접선 방향으로 발사
COSMOS 4

조석 꼬리

은하가 스쳐 지나면 가까운 쪽 별은 세게, 먼 쪽 별은 약하게 당겨집니다. 이 힘의 차이가 별들을 긴 리본으로 뽑아냅니다. 규칙을 넣은 게 아니라 만유인력 하나에서 저절로 나오는 형태입니다.

// 코드에 "꼬리" 없음.
// F = Gm₁m₂/r² 하나가
// 안테나 은하를 그린다

진짜 물리 시리즈

같은 끌림을 입체로 본다

위 판은 별을 평면에 놓고 풉니다. 실제 은하는 입체이고, 같은 힘 법칙이 세 방향으로 작용합니다. 아래는 같은 규칙(거리 제곱에 반비례)을 3차원에서 매 프레임 적분한 것입니다.

같은 끌림을 입체로 본다끌어서 회전 · 휠로 확대 · 손 떼면 다시 돈다
무거운 중심도는 별가까울수록 빨리 돕니다 — 케플러가 말한 그 관계입니다.

이 판이 미리 넣어 둔 궤도를 재생하는 것이 아닙니다. 매 프레임 가속도를 구해 속도와 위치를 갱신합니다. 그래서 새로 고칠 때마다 조금씩 다른 모양이 됩니다.

별 개수는 눈으로 보기 위해 줄였습니다. 위 판의 5,000개는 Barnes-Hut 로 근사해 푸는 것이고, 여기는 직접 계산합니다.

실물은 이렇게 생겼다

위 화면은 별들이 서로를 당기게 놔둔 계산입니다. 실제로 그 일이 벌어지고 있는 곳을 허블이 찍었습니다.

구상성단 M15. 가운데가 하얗게 뭉쳐 있고 바깥으로 갈수록 별이 성기게 흩어진다. 푸른 별과 주황 별이 섞여 있다.

① 서로 당긴 결과가 이 모양이다

구상성단 M15입니다. 가운데가 하얗게 뭉쳐 셀 수 없고, 바깥으로 갈수록 성기게 흩어집니다. 푸른 별과 주황 별이 섞여 있고요.

위 화면을 한참 돌려 두면 나오는 모양이 이것입니다 — 아무렇게나 뿌려 놓아도 서로 당기다 보면 가운데가 빽빽해지고 가장자리는 헐거워집니다. 누가 그렇게 배치한 게 아니라 중력만으로 그렇게 됩니다.

그리고 이 사진이 이 판의 계산량 이야기이기도 합니다. 별을 하나하나 짝지어 힘을 다 계산하면 개수의 제곱으로 늘어납니다. 저 성단은 별이 수십만 개입니다 — 전수로는 못 풉니다. 그래서 멀리 있는 무리를 덩어리 하나로 묶어 근사하고, 그 묶는 기준이 위 θ 손잡이입니다.

사진 NASA, ESA · CC BY 3.0 · 위키미디어 커먼즈
이 화면은 이 네 종목 이야기입니다● 시세 불러오는 중

기준일을 100으로 놓고 그린 선입니다. 통화가 서로 달라 지수로 겹쳤습니다.

같은 기술의 서로 다른 칸입니다. 주가가 이 기술 때문이라고는 말하지 않습니다.