03. 세 번째 수업: 도형 속의 무리수와 피타고라스 (Irrational Geometry)
무리수가 수직선 위의 “빈 구멍”을 채우기 위해 억지로 불려온 괴짜 손님이 아닙니다. 무리수는 평면이나 공간으로 차원이 이동하는 순간 자연계와 2D 기하학 어디에서나 그 압도적인 존재감을 드러냅니다. 특히 그 중심에는 대수학의 꽃, 피타고라스 정리가 자리 잡고 있습니다.
1. 피타고라스 정리와 무리수의 부활 ($a^2 + b^2 = c^2$)
이 인트로에서 히파소스를 바다로 내던져지게 만든 그 악마의 도형, “가로가 $1$, 세로가 $1$인 직각삼각형”을 떠올려봅시다.
- 밑변 $a = 1$
- 높이 $b = 1$
- 대각선(빗변) $c = x$
피타고라스 공식에 집어넣으면: \(1^2 + 1^2 = c^2\) \(c^2 = 2\) \(\textbf{c = \sqrt{2}}\)
길이를 재기 위해 자로 직각삼각형을 그리는 순간, 여러분의 캔버스 위에는 너무나도 자연스럽게 무리수($\sqrt{2}$) 길이의 선분이 튀어나옵니다. 어쩌면 무리수는 1차원의 단순한 잣대가 아닌 2차원을 위한 신의 건축 자재일지도 모릅니다.
2. 달팽이 배열 (직각삼각형의 연속 나선)
그리스 수학자 테오도로스는 루트 2, 루트 3, 루트 4… 무리수가 한 치의 오차 없이 연속해서 자라나는 기적 같은 도형의 나선 배열(The Spiral of Theodorus)을 고안해 냈습니다.
- 먼저 가로 세로가 $1$ 인 첫 번째 파란 직각삼각형을 그립니다. 대각선 빗변은 $\sqrt{2}$ 가 됩니다.
- 그 대각선($\sqrt{2}$) 위에 다시 수직 높이가 $1$ 인 두 번째 직각삼각형을 덧대어 그립니다.
- 새로운 대각선은 피타고라스에 의해 $x^2 = (\sqrt{2})^2 + 1^2 = 3$ 이 됩니다. 즉 빗변 길이는 $\sqrt{3}$ 입니다.
- 그 위에 또 높이 $1$ 을 얹으면 빗변은 $\sqrt{4} (즉, 2)$, 또 얹으면 $\sqrt{5}$ …
이렇게 변의 길이는 끝없이 무리수 제곱근의 형태를 띠며 빙글빙글 달팽이 형상으로 자라나게 됩니다.

3. 파이썬 터틀로 루트 나선(테오도로스 달팽이) 그리기!
머릿속으로 상상만 했던 이 기하학적 아름다움을 파이썬의 turtle 애니메이션 모듈로 스케치북에 직접 작도해보면, 무리수가 2차원 공간을 얼마나 정교하게 구성하는지 시각적으로 느낄 수 있습니다. 빗변과 각도를 찰나의 연산으로 추적하여 소라껍질을 건설해 봅시다.
# [Python] 루트2, 루트3의 무리수 증식 배열: 테오도로스의 달팽이 그리기
import turtle
import math
# 1. 캔버스 준비
screen = turtle.Screen()
screen.setup(600, 600)
screen.bgcolor("#1A202C")
screen.title("무리수의 기하학: The Spiral of Theodorus")
# 2. 그림을 그릴 터틀 객체
t = turtle.Turtle()
t.speed(0) # 가장 빠른 속도
t.color("#4FD1C5")
# 초기 설정
base_length = 50 # 숫자 1에 해당하는 픽셀 길이
current_angle = 0 # 터틀이 바라보는 처음 각도
max_iteration = 17 # 루트 17 까지 그릴 예정
# 중앙 지점 좌표 저장
center_x, center_y = 0, 0
for i in range(1, max_iteration):
# 빗변이 아닌, 수직 '높이(len 1)' 를 그리기 위해 직각(90도)으로 꺾는다
t.left(90)
# 붓을 내리고 높이 1 만큼 직진
t.pendown()
t.pencolor("#F6AD55") # 높이는 주황색! (우리가 추가하는 조각)
t.forward(base_length)
# 여기서 터틀의 현재 위치(x, y)가 새로 만들어진 빗변의 끝점이 된다.
x, y = t.position()
# 다시 원점(Center)으로 연결되는 선(새로운 루트 빗변)을 긋는다
t.pencolor("#A0AEC0") # 루트 빗변은 회색
t.goto(center_x, center_y)
# 빗변을 타고 돌아왔으므로 터틀의 현재 머리방향도 원점을 향하고 있을 확률이 크다.
# 수학적으로 깔끔하게 다음 턴 각도를 잡기 위해, 터틀 위치를 다시 바깥 점(x,y)으로 보내고,
# 원점과 바깥점 사이의 빗변의 절대 각도(heading)를 구해서 터틀의 머리를 그에 맞게 교정해준다!
t.penup()
t.goto(x, y)
# 삼각함수를 써서 원점에서 점(x,y)까지의 직선 각도(아크탄젠트)를 계산!
# math.degrees() 로 라디안(Radian)을 친숙한 디그리 각도법으로 바꿈
new_heading = math.degrees(math.atan2(y, x))
t.setheading(new_heading) # 터틀 머리를 빗변과 일치하게 세팅! (돌리면 직각으로 나가겠지)
# 그리기 완료 후 클릭 대기
screen.exitonclick()
이 코드를 실행하고 화면을 바라보면, 회색의 $\sqrt{2}, \sqrt{3}, \sqrt{4}…$ 대각선들이 아름다운 달팽이 나선을 이루며 공간을 뒤덮어가는 것을 감상할 수 있습니다.
단순히 소수점 밑이 더럽고 긴 숫자가, 공간상에서는 소라껍질이나 은하수의 팽창하는 뼈대 조각이 된다는 이 놀라운 발견. 이것이 바로 기하학과 무리수가 만나 폭발하는 수학계의 빅 뱅이었습니다.