6. 파이썬으로 구현하는 원론 기하학: SymPy Geometry
[도입부] 학습 목표 (Learning Objectives)
- 2000년 전 유클리드가 모래판 위에 작대기와 끈으로 낑낑대며 그렸던 도형 증명을, 최첨단 AI 파이썬 라이브러리인
sympy.geometry를 이용해 단 3줄 코드로 박살 냅니다. - 점오브젝트(
Point), 선분오브젝트(Segment), 원오브젝트(Circle)가 컴퓨터 메모리상에서 어떻게 차원을 팽창시키며 유클리드 세계를 디지털 렌더링 하는지 탐구합니다. - 삼각형의 수동 증명 퀘스트들을 파이썬 내장 충돌 검사 알고리즘을 통해 0.001초 만에 논리결과값(
True/False)으로 추출하는 자동화 세계를 맛봅니다.
1. 2D 유클리드 엔진: SymPy Geometry 아카이브
지금까지 개발자들은 도형 문제를 풀기 위해 머리가 빠지도록 삼각 삼각비 $\cos, \sin$ 수식을 파이썬 코드로 우겨넣어야 했습니다. 하지만 파이썬의 강력한 인공지능 수학 모듈인 SymPy 안에 숨겨진 geometry 서브 엔진을 켜는 순간, 고대 유클리드의 마법 지팡이를 쥐게 됩니다.
이 모듈은 오직 “유클리드 2D 평면 기하학 시스템” 그 자체를 모방하도록 설계되었습니다. 숫자나 계산식이 아니라 기하학적 ‘물리 객체(Object)’를 허공에 던져 올리고 서로 충돌, 교차, 측정시킬 수 있습니다.
Point(x, y): 부분(크기)이 없는 0차원 점 렌더링.Segment(A, B): 점 A에서 점 B를 잇는 두께가 없는 1차원 선분 빔 발사.Circle(center, radius): 중심점과 반지름으로 돌아가는 절대 영역 방어막.Triangle(A, B, C): 3개의 노드를 연결하여 만든 2D 클로즈드(Closed) 메시.
2. 💻 파이썬(Python)의 도형 충돌 테스트 (Intersection)
두 선이 언제 만나는가, 두 원이 어떻게 겹치는가 등 기하학의 핵심 증명들은 결국 ‘가위질(교차, Intersection)’ 좌표를 찾는 충돌 매커니즘 입니다. 두 개의 선분을 X 자로 발사하여 컴퓨터가 교차점을 레이더로 스캔해내는 능력을 테스트합니다!
🐍 파이썬 예제: X축 레이저 선 빔 교차 타격 시뮬레이터
from sympy.geometry import Point, Segment, intersection
print("--- ⚔️ SymPy Geometry 엔진: 양 대각선 레이저 교차 충돌 검증 ---")
# 1. 0차원 좌표 마커 4개 설치 (사변형의 꼭짓점)
p1 = Point(0, 0) # 왼쪽 아래
p2 = Point(10, 10) # 오른쪽 위
p3 = Point(0, 10) # 왼쪽 위
p4 = Point(10, 0) # 오른쪽 아래
# 2. 1차원 레이저 빔(선분) 대각선 발사!
line_A = Segment(p1, p2) # / 방향 스크래치
line_B = Segment(p3, p4) # \ 방향 스크래치
print(f"[SYSTEM] 1번 레이저: {p1} ~ {p2} 발사!")
print(f"[SYSTEM] 2번 레이저: {p3} ~ {p4} 발사!")
# 3. 충돌 이벤트 스캔 (두 레이저는 어디서 마찰을 일으키는가?)
# intersection 메소드가 두 기하 객체의 충돌 좌표를 튜플 배열로 뽑아냅니다.
collision = intersection(line_A, line_B)
print("-" * 50)
if collision:
# collision 은 리스트이므로 0번째 요소(Point객체)를 꺼냄
impact_point = collision[0]
print(f"🔥 타격 확인!! 두 레이저빔은 정확히 좌표 {impact_point} 허공에서 폭발했습니다.")
# 뽀너스: 중앙 교차지점에서 양 끝까지 거리가 같을까? (유클리드 이등분 정리)
dist1 = impact_point.distance(p1)
dist2 = impact_point.distance(p2)
print(f"👉 교점에서 왼쪽아래까지 기리: {dist1.evalf():.2f}")
print(f"👉 교점에서 오른쪽위까지 기리 : {dist2.evalf():.2f}")
if dist1 == dist2:
print("✅ [기하학 정리 증명 완료] X 레이저는 서로를 완벽히 반 쪼갭니다(이등분)!")
# 결과창:
# --- ⚔️ SymPy Geometry 엔진: 양 대각선 레이저 교차 충돌 검증 ---
# [SYSTEM] 1번 레이저: Point2D(0, 0) ~ Point2D(10, 10) 발사!
# [SYSTEM] 2번 레이저: Point2D(0, 10) ~ Point2D(10, 0) 발사!
# --------------------------------------------------
# 🔥 타격 확인!! 두 레이저빔은 정확히 좌표 Point2D(5, 5) 허공에서 폭발했습니다.
# 👉 교점에서 왼쪽아래까지 기리: 7.07
# 👉 교점에서 오른쪽위까지 기리 : 7.07
# ✅ [기하학 정리 증명 완료] X 레이저는 서로를 완벽히 반 쪼갭니다(이등분)!
개발자는 더 이상 중학교 시절처럼 모눈종이를 박박 찢으며 컴퍼스를 돌릴 필요가 없습니다! Point, Segment 객체만 생성해 intersection 이라는 충돌 감지 콜백 한 번만 때리면, 2000년 전 유클리드의 정리가 컴퓨터 과학의 정수 안에 그대로 녹아 있음을 발견할 수 있습니다.
[결론] 학습 정리 (Summary)
- 디지털 캔버스: 2300년 전 모래와 작대기로 그리던 기하학이 현대의 모니터 픽셀과 파이썬 메모리 객체 할당(OOP)으로 리마스터링 되는 과정을 이해했습니다.
sympy.geometry위력: 복잡한 좌표 계산 공식($ax+by=c$)들을 암기할 필요 없이, 가장 직관적인 ‘점과 선’의 객체 메서드 체이닝 만으로 우주의 모든 교집합 정보를 스캔합니다.- 유클리드의 불멸성: 2D 게임 클러스터의 폴리곤 연산, 안드로이드 GUI 등 현존하는 모든 평면 IT 기술의 뼛속 코어 로직은, 이름만 라이브러리로 바뀌었을 뿐 유클리드 스토이케이아(원론)의 공리와 공준 로직을 100% 카피하고 있다는 사실이 인류 기술 스택의 경이로움입니다.
서브목차