에듀테크 프로젝트 대시보드
망델브로 집합 (Mandelbrot Set)
덧셈과 곱셈만 아는 아주 짧은 규칙 z ← z² + c 를 반복했을 뿐인데
— 어떤 c는 값이 얌전히 머물고, 어떤 c는 무한대로 튕겨 나간다.
"머무는 점"만 검게 칠하면 무한히 파고들어도 똑같은 무늬가 나오는 프랙탈이 태어난다.
복소수 c를 하나 고르고, z를 0에서 시작해 계속 z = z² + c로
바꾼다. 이 값들의 행렬을 궤도(orbit)라고 한다. 궤도가 원점에서 반지름 2를 벗어나는 순간
"이 점은 반드시 무한대로 발산한다"가 수학적으로 보장된다 — 그래서 반지름 2가 탈출선이다.
회색 원 = 탈출 반지름 2 · 노란 점들 = 궤도 ·
플롯을 클릭해 c를 옮겨 보자
c = -0.400 + 0.600i
판정: —
|z| 최종 = —
궤도가 한 점/고리로 수렴하면 집합 안(검정), 나선을 그리며 튀어 나가면 집합 밖이다.
화면의 픽셀 하나가 복소평면의 c 하나다. 각 픽셀에서 위 반복을 돌려
몇 번 만에 반지름 2를 넘었는지(탈출 시간)를 색으로 바꾼다.
끝까지 안 넘으면 검정 — 그게 망델브로 집합이다.
그림을 클릭하면 그 지점으로 확대된다.
중심 (-0.5, 0) · 폭 3.0 · 배율 ×1
반복을 늘릴수록 검은 영역의 가느다란 "촉수"와 경계의 미세 구조가 더 선명해진다.
깊이 확대하면 부동소수점 정밀도(double) 한계로 픽셀이 뭉개진다.
z=0에서 시작해 c를 픽셀로" 두는 것이라면,
줄리아 집합은 "c를 하나로 고정하고 z의 시작점을 픽셀로" 둔다.
망델브로 집합은 사실 "모든 줄리아 집합의 지도"다 — c가 망델브로 안에 있으면
그 줄리아 집합은 한 덩어리로 연결되고, 밖이면 먼지처럼 흩어진다.
큰 몸통 왼쪽에 붙은 작은 원, 그 위 촉수 끝에 또 붙은 더 작은 몸통… 아무리 확대해도 전체를 닮은 축소판(mini-brot)이 계속 나온다. "부분이 전체를 닮는다"는 이 성질이 프랙탈의 핵심이고, 그래서 이 그림은 정보량은 거의 0인데 세부는 무한하다.
탈출 시간 한 픽셀은 이게 전부다. 복소수 곱셈 (a+bi)² = a²-b² + 2abi만 풀어 쓰면 된다.
function escapeTime(cx, cy, maxIter) {
let x = 0, y = 0, iter = 0;
while (x*x + y*y <= 4 && iter < maxIter) {
const xt = x*x - y*y + cx; // z^2 의 실수부 + c
y = 2*x*y + cy; // z^2 의 허수부 + c
x = xt;
iter++;
}
return iter; // maxIter 면 "집합 안" 으로 간주
}
경계를 매끄럽게 칠하려면 정수 iter 대신
iter + 1 - log₂(log|z|) 같은 연속 탈출 값(smooth coloring)을 쓴다.
이 페이지의 그림도 그 방식이다.
| c 값 | 궤도 행동 | 집합 | 색 |
|---|---|---|---|
0 | 계속 0 | 안 | 검정 |
-1 | 0, -1, 0, -1 … (주기 2) | 안 | 검정 |
0.3 | 0.15… 로 수렴 | 안 | 검정 |
1 | 0,1,2,5,26 … 폭발 | 밖 | 탈출 시간 색 |
2i | 즉시 발산 | 밖 | 어두운 색 |
c ≈ -0.75) 바로 안팎으로 조금씩 옮기며
"수렴 ↔ 발산"이 갈리는 걸 보라. ② 아래 그림을 몸통과 원이 만나는 잘록한 목("seahorse valley",
c ≈ -0.75 + 0.1i) 근처로 여러 번 확대하면 해마 꼬리 모양이 나온다.
③ 줄리아 집합을 켜고 최대 반복을 올려 보라.