4. 자와 컴퍼스의 마법: 정삼각형의 작도 (명제 1번)

[도입부] 학습 목표 (Learning Objectives)

  • 유클리드 기하학의 유일한 하드웨어 도구인 ‘눈금 없는 자(Straightedge)’‘컴퍼스(Compass)’ 의 제한된 기능과 그 철학적 미학을 분석합니다.
  • 공준 1, 2, 3번을 활용하여 텅 빈 도화지 허공 위에 가장 완벽한 대칭을 지닌 ‘정삼각형(Equilateral Triangle)’을 순식간에 소환해 내는 ‘명제 1번 알고리즘’을 해킹합니다.
  • 파이썬(Python)의 원의 방정식과 교점 스캔을 통해, 두 원의 교집합 위치에 새로운 노드를 생성하는 작도 과정을 코드로 재현(Simulation) 합니다.

1. 제약 조건 속에서 터지는 미학: 눈금 없는 자와 컴퍼스

유클리드가 허락한 무기 아이템은 딱 두 가지뿐입니다.

  1. 눈금 없는 자: 길이를 잴 수는 없고, 오직 “점과 점을 이어 반듯한 직선을 그리는” 기능 특화 레이저 마커입니다.
  2. 컴퍼스: “한 점을 중심으로 삼고, 벌린 폭만큼을 반지름 삼아 원궤적을 그리는” 각도기 스윙봇입니다! 단, 종이에서 바늘을 떼는 순간 벌어져 있던 다리가 포맷오류로 확 오므라들기 때문에(거리를 옮겨 다닐 수 없음) 엄격한 제약이 걸려있습니다.

왜 센치($cm$) 눈금을 버렸을까요? “대충 5cm인 것 같네!” 하는 인간의 불안정하고 부정확한 감각치, 경험치를 철저하게 분쇄하고 “오직 원과 선의 충돌 논리로만 진리를 입증하겠다”는 신성한 순결주의 선언입니다.

두 개의 거대 원이 겹치며 정삼각형을 소환해내는 작도 과정 SVG


2. 튜토리얼 퀘스트: 선분 위에 정삼각형을 소환하라!

원론 제1권의 대망의 첫 번째 퀘스트인 명제 1번! “주어진 선분(A-B)을 바닥으로 삼아, 세 변의 길이가 완벽히 같은 정삼각형을 작도하라.”

  1. 컴퍼스 코어 발동 1: A점을 코어 중심으로 삼고, 컴퍼스 다리를 B점까지 쫘악 벌립니다. 그리고 A를 중심으로 원을 슈우욱 하나 그립니다. (이 원 테두리의 모든 점은 A에서 B만큼 떨어져 있습니다.)
  2. 컴퍼스 코어 발동 2: 이번엔 B점을 코어 중심으로 삼고, 다리를 A점까지 쫘악 벌린 뒤, 또 원을 둥글게 그립니다! (이 원 테두리는 B에서 A반지름만큼 동일하게 떨어진 궤적들입니다.)
  3. 충돌 교점 스캔: 허공에서 파란색 원1과 빨간색 원2가 정확히 위쪽에서 “쾅!” 하고 부딪히는 핫스팟 교점 C를 스캔해서 마킹(Mark)합니다.
  4. 레이저 마커(자) 발동: 점 A에서 교점 C로 직선을 긋고, 점 B에서 교점 C로 직선을 쫙 긋습니다.

[논리 입증]

  • AC의 길이는 A를 중심으로 한 원의 반지름이므로 AB와 같습니다.
  • BC의 길이는 B를 중심으로 한 원의 반지름이므로 이 역시 AB와 같습니다.
  • “같은 놈(AB) 과 같은 두 놈(AC, BC)은 서로서로 다 똑같다”는 공리 1번 발동! 결국 세 변의 길이는 복제된 것처럼 완벽히 일치하여 정삼각형 소환에 성공합니다! 이것이 작도의 마법입니다!

3. 💻 파이썬(Python)의 교점 스캐닝 증명

그래픽 프로그램은 눈금과 자 없이도 두 원의 “방정식 연립”을 통해 위쪽 부딪히는 충돌점 C 좌표를 한 치의 오차도 없이 레이더망으로 찾아냅니다.

🐍 파이썬 예제: 정삼각형 작도 (두 원의 교점 찾기)

import sympy as sp
import math

print("--- ⚔️ 원론 작도 자동화: 명제 1번 정삼각형 소환 ---")

# (좌표 설정) A점을 (0,0), B점을 (2,0) 에 배치. (선분 AB 길이는 2)
# 파이썬 수학엔진(SymPy) 로드
x, y = sp.symbols('x y')

# 1. A점(0,0) 코어 작동: 반지름이 2인 푸른색 원 스킬 장전
circle_A = x**2 + y**2 - 4  # (x-0)^2 + (y-0)^2 = 2^2

# 2. B점(2,0) 코어 작동: 반지름이 2인 붉은색 원 스킬 장전
circle_B = (x - 2)**2 + y**2 - 4 # (x-2)^2 + (y-0)^2 = 2^2

print("[SYSTEM] 양쪽 진영에서 거대한 원 반경 2개를 팽창시킵니다... 충돌 지점 계산 중!")

# 3. 방정식 충돌! (두 원의 교점 좌표 해킹)
intersections = sp.solve((circle_A, circle_B), (x, y))

# 위쪽 교점 C 좌표 필터링 (y값이 양수인 쪽)
for pt in intersections:
    if pt[1] > 0:
        c_x = float(pt[0])
        c_y = float(pt[1])
        print(f"📡 [스캔 완료] 위쪽 허공 교점 C의 좌표 발견: ({c_x:.1f}, {c_y:.3f})")

print(f"\n[검증] 변의 길이 측정 (루트 거리 공식)")
dist_AC = math.sqrt((c_x - 0)**2 + (c_y - 0)**2)
dist_BC = math.sqrt((c_x - 2)**2 + (c_y - 0)**2)
print(f"👉 선분 AC 길이: {dist_AC:.1f}")
print(f"👉 선분 BC 길이: {dist_BC:.1f}")
print(f"👉 바닥 선분 AB 길이: 2.0")
print("✅ [MISSION CLEAR] 세 변의 길이가 완벽히 2.0 으로 일치하는 정삼각형 작도 성공!")

# 결과창:
# --- ⚔️ 원론 작도 자동화: 명제 1번 정삼각형 소환 ---
# [SYSTEM] 양쪽 진영에서 거대한 원 반경 2개를 팽창시킵니다... 충돌 지점 계산 중!
# 📡 [스캔 완료] 위쪽 허공 교점 C의 좌표 발견: (1.0, 1.732)
# 
# [검증] 변의 길이 측정 (루트 거리 공식)
# 👉 선분 AC 길이: 2.0
# 👉 선분 BC 길이: 2.0
# 👉 바닥 선분 AB 길이: 2.0
# ✅ [MISSION CLEAR] 세 변의 길이가 완벽히 2.0 으로 일치하는 정삼각형 작도 성공!

유클리드는 이 교점의 성질을 단지 머릿속 상상과 기호 논리만으로 풀어냈지만, 오늘날 컴퓨터는 방정식 연립 충돌 로직으로 $y = \sqrt{3} (\approx 1.732)$ 라는 하드웨어 데이터 수치를 렌더링에 직접 쏴줍니다.


[결론] 학습 정리 (Summary)

  1. 도구의 극사실주의 제한: 길이를 재는 더러운 반칙(자 눈금)을 버리고, 오직 점 잇기와 원 그리기라는 가장 퓨어(Pure)한 기하학적 본질 2가지만 허용했습니다.
  2. 정삼각형 작도(명제 1번): 두 개의 원을 그려 그 테두리(반지름)가 중첩되는 마법의 포인트를 찾아내어 텅 빈 사막에서 정삼각형을 탄생시켰습니다.
  3. 증명의 미학: 작도 자체가 목적이 아닙니다. 왜 이게 무조건 정삼각형이 될 수밖에 없는지를 앞서 선언한 공리(같은 것끼리 같다)를 끌고 와서 “증명”해 내는 것이 원론의 최강 스킬입니다.
서브목차