지난 데모의 번개는 노이즈로 흔든 선이었습니다. 이 페이지의 번개는 전위장을 라플라스 방정식으로 풀고, 전기장이 강한 곳을 확률적으로 골라 한 칸씩 자라는 방전 시뮬레이션입니다. 선도(leader)가 길을 더듬다 땅에 닿는 순간, 귀환뇌격이 번쩍입니다. 바닥을 클릭해 피뢰침을 세워 보세요. 번개가 그쪽으로 이끌립니다.
선도는 구름과 같은 전위(φ=0), 대지는 φ=1. 그 사이 공기의 전위를 라플라스 방정식으로 풉니다. 매 프레임 야코비 반복으로 갱신합니다.
for (k = 0; k < sweeps; k++) φ[i] = (φ[좌]+φ[우]+φ[상]+φ[하]) / 4 // 선도·대지 칸은 고정(경계조건)
선도에 붙은 공기 칸이 전부 후보입니다. 각 후보가 뽑힐 확률은 전위의 η제곱에 비례합니다. 주사위를 던져 한 칸씩 자랍니다.
w[i] = pow(φ[i], η)
r = random() * Σw
// r가 떨어진 후보가 새 선도
parent[새칸] = 뻗어나온 칸
자란 칸은 도체가 되어 φ=0으로 고정되고, 전위장이 다시 풀립니다. 앞이 갈라지고, 막힌 가지는 버려집니다. 실제 번개의 계단 선도(stepped leader)가 이 과정입니다.
state[새칸] = LEADER φ[새칸] = 0 // 경계조건 추가 // 다음 프레임, 장이 재배치된다
선도가 대지(또는 피뢰침)에 닿는 순간 회로가 완성됩니다. parent를 거슬러 올라가 본류를 찾고, 그 길로 대전류가 흐릅니다. 우리가 "번개"라고 부르는 섬광은 이 귀환뇌격이고, 실제로도 2~4회 재타격하며 깜빡입니다.
while (cell != root)
channel.push(cell)
cell = parent[cell]
flash(3.2), flash(2.2), flash(1.4)
위 화면은 라플라스 방정식을 풀어 번개가 갈 길을 고르게 한 것입니다. 진짜 낙뢰 사진과 나란히 놓고 보십시오.
땅까지 닿은 굵은 줄기가 하나 있고, 그 옆으로 가늘게 갈라졌다가 그냥 끊긴 가지가 여럿 보입니다. 오른쪽에도 희미한 가지 무리가 따로 뻗어 있고요.
이게 이 판의 전부입니다 — 번개는 한 줄로 곧게 내리꽂는 게 아니라 여러 갈래로 더듬다가 먼저 닿은 길만 굵어집니다. 나머지는 저렇게 도중에 멈춥니다. 위 화면의 가지치기 지수 손잡이가 그 ‘더듬는 정도’를 정합니다.
같은 식이 번개만 설명하는 게 아닙니다. 아래 적어 뒀듯이 리히텐베르크 문양과 수지상 방전이 전부 이 하나로 나옵니다. 나뭇가지처럼 갈라진 것들이 서로 닮은 데는 이유가 있습니다.
기준일을 100으로 놓고 그린 선입니다. 통화가 서로 달라 지수로 겹쳤습니다.