클릭한 곳마다 물방울이 떨어지고, 물결끼리는 부딪히지 않고 더해진 채 서로를 통과합니다. 벽을 그리면 반사되고, 틈을 만나면 돌아 나갑니다. 그리고 버튼 하나로, 물리학에서 가장 유명한 실험인 이중 슬릿 간섭을 이 물 표면에서 직접 재현할 수 있습니다.
점선은 각각 혼자 보냈을 때, 실선은 둘을 같이 보냈을 때입니다. ①③에서는 점선이 실선 위에 정확히 얹혀 보이지 않습니다 — 혼자 갈 때와 똑같다는 뜻입니다. ②에서만 실선이 두 점선의 높이를 더한 만큼 솟습니다 — 부딪힌 흔적이 남지 않습니다. 손으로 그린 그림이 아니라 위 식을 그대로 돌린 결과입니다.
각 칸은 이웃과의 높이차(라플라시안)만큼 가속됩니다. 이 지역 규칙 하나가 동심원으로 퍼지는 물결을 만듭니다.
lap = h[좌]+h[우]+h[상]+h[하] - 4h[i]
h틈[i] = 2h[i] - h이전[i] + c²·lap
// leapfrog: 과거·현재로 미래를 만든다
물결 두 개가 만나도 서로를 밀치지 않습니다. 높이가 더해질 뿐이고, 지나간 뒤엔 각자 갈 길을 갑니다. 물방울 여러 개를 겹쳐 떨어뜨려 보세요.
// 규칙 추가 없음. // 선형 방정식이라 중첩은 공짜다.
벽(h=0 고정)에 닿은 물결은 뒤집혀 돌아옵니다. 틈을 지난 물결은 틈을 새 파원 삼아 다시 동심원으로 퍼집니다. 하위헌스의 원리입니다.
if (wall[i]) h[i] = 0 // 경계조건 하나로 반사·회절이 // 전부 따라 나온다
두 틈에서 나온 물결이 겹치며, 경로차가 반파장이면 상쇄되고 한 파장이면 보강됩니다. 그 결과가 부챗살 줄무늬입니다. 1801년 영(Young)이 빛으로 이걸 보여 파동설을 증명했습니다.
경로차 = |d₁ − d₂| 보강: 경로차 = nλ 상쇄: 경로차 = (n+½)λ
위 판이 매 프레임 푸는 높이 h(x,y) 를 그대로 세운 것입니다 — 새로 계산한 게 하나도 없습니다. 위에서 물방울을 떨어뜨리거나 벽을 그리거나 이중 슬릿을 켜면, 여기 수면도 같이 움직입니다. 끌면 돌아갑니다.
위 판은 물결을 옆에서 자른 선으로 보여 줍니다. 실제 수면은 면이고, 파동 방정식은 그 면 위에서 풀립니다. 아래는 같은 방정식을 격자 위에서 매 프레임 푼 것입니다.
돌려 보면 간섭 무늬가 면 위에 줄무늬로 남는 것이 보입니다. 위 판의 선 그림에서 오르내리던 것이, 면에서는 격자 모양으로 나타납니다.
격자는 눈으로 보기 위해 성기게 잡았습니다. 값은 매 프레임 이웃 격자와의 차이로 갱신합니다.
위 화면은 격자 한 칸의 높이를 이웃과 비교해 밀어 주는 규칙 한 줄만 돌린 것입니다. 진짜 바다에서도 같은 일이 벌어집니다.
프랑스 대서양 연안 일 드 레 섬, ‘고래 등대’ 꼭대기에서 내려다본 바다입니다. 수면이 바둑판 격자로 보입니다.
파도가 줄을 맞춰 선 게 아닙니다. 방향이 다른 너울 두 줄이 같은 물 위를 동시에 지나가는 중입니다. 마루끼리 만난 자리는 높아지고, 마루와 골이 만난 자리는 평평해집니다. 그 높낮이가 규칙적으로 놓이면서 격자가 됩니다.
위 판의 RULE 2 중첩이 하는 일이 정확히 이것입니다. h = h₁ + h₂ — 규칙을 새로 넣은 게 아니라, 방정식이 선형이라 공짜로 따라 나오는 성질입니다. 화면에서 물방울을 두 군데 떨어뜨리면 같은 격자가 생깁니다.
다른 건 크기뿐입니다. 화면은 288×192 = 55,296칸이고, 여기는 바다 몇 km입니다. 그리고 겹친 자리를 벗어나면 두 너울은 각자 원래 방향으로 그대로 갑니다 — 섞이지 않습니다. 대신 그 위에 뜬 배는 두 방향에서 동시에 얻어맞는 셈이라, 선원에게는 까다로운 바다입니다.
독일 북해의 방게로게 섬입니다. 모래가 쓸려 나가는 걸 막으려고 바다 쪽으로 돌제방(Buhne)을 하나 뻗어 놓았습니다. 사진 왼쪽의 검은 띠입니다.
먼 바다에서는 물결이 곧은 줄로 밀려옵니다. 그런데 제방 끝을 지나는 순간 줄이 휘어, 제방 뒤 그늘 쪽으로 돌아 들어갑니다. 벽이 물결을 막아 세운 게 아니라, 벽 끝이 새로운 출발점이 된 것입니다.
위 판에서 벽 그리기로 벽을 세우고 가운데를 틔워 보세요. 같은 일이 일어납니다. 틈이 새 파원이 되어 동심원으로 다시 퍼집니다 — RULE 3에 적힌 하위헌스의 원리이고, 코드에서는 wall[i]이면 h[i]=0 이 한 줄이 전부입니다.
다만 진짜 바닷가는 화면보다 복잡합니다. 여기서 보이는 휘어짐에는 구조물 끝을 돌아 드는 회절과, 물이 얕아질수록 물결이 느려져서 생기는 굴절이 겹쳐 있습니다. 화면은 수심이 일정하다고 놓고 풀기 때문에 회절만 나옵니다. 더 단순한 쪽이 화면입니다.
기준일을 100으로 놓고 그린 선입니다. 통화가 서로 달라 지수로 겹쳤습니다.