07. 일곱 번째 수업: 삼각형의 무게중심 (Centroid)

삼각형 모양의 얇고 평평한 철판이 있다고 상상해 봅시다. 이 철판을 손가락 끝에 올렸을 때 완벽하게 수평을 유지하며 떨어지지 않고 뱅글뱅글 돌아가는 기적의 포인트가 딱 한 군데 존재합니다. 기하학과 물리학이 완벽하게 교차하는 그곳, 바로 무게중심(Centroid)입니다.


학습 목표

  • 세 중선(Median)이 만나는 삼각형 역학의 중심점인 무게중심의 작도 원리를 배웁니다.
  • 무게중심이 중선을 항상 $2:1$의 비율로 분할한다는 물리학적 절대 비율을 이해합니다.
  • 파이썬의 객체 지향(OOP) 좌표 평면 배열 연산을 통해 모니터 속 3D 폴리곤의 무게중심을 실시간으로 추적하는 수학적 평균(Averaging) 코드를 작성합니다.

1. 무게중심의 탄생: 중선(Median)의 교차

세 개의 중선이 교차하며 2:1의 황금비율로 나뉘는 삼각형의 무게중심(G) 좌표를 기하학적으로 표현한 SVG

무게중심을 찾는 방법은 의외로 단순합니다.

  1. 세 꼭짓점에서 각각 마주 보는 변의 한가운데(중점)를 향해 직선을 날립니다. 이 선을 중선(Median)이라고 부릅니다.
  2. 각 꼭짓점에서 발사된 3개의 중선은 기적처럼 허공을 가르고 정확히 한 점에서 충돌합니다!
  3. 그 충돌 지점 기호 $G$(Gravity)가 바로 이 삼각형의 모든 질량이 집중되는 무게중심입니다.

[우주 비율 $2 : 1$] 무게중심 $G$는 언제나 각각의 중선을 꼭짓점 쪽에서부터 $2$, 밑변 쪽에서부터 $1$이 되는 비율($2:1$)로 칼같이 쪼개어 버립니다. 이 비율은 삼각형이 아무리 비정상적으로 길쭉하게 찌그러져도 변하지 않는 우주의 진리입니다.

2. Python 물리 엔진: 3D 폴리곤의 균형 회복 (Averaging)

복잡한 3D 기하학 폴리곤 덩어리가 로봇 랩실에서 가느다란 핀포인트 레이저 한 가닥 위에서 완벽히 균형(무게중심)을 잡고 있는 일러스트

현대 컴퓨터 그래픽스(CG)가 괴물의 3D 모델(수만 개의 3차원 삼각형 폴리곤)이 공중제비를 돌 때마다 그 폴리곤들이 뒤틀리지 않고 어디를 축으로 회전해야 하는지 어떻게 계산할까요? 답은 허무할 정도로 단순합니다. 각 꼭짓점 $X, Y, Z$ 좌표의 ‘산술 평균(Average)’을 내어버리면 거기가 바로 무게중심 좌표(Centroid)가 됩니다!

# 파이썬으로 구현하는 3D 물리 엔진의 무게중심(Centroid) 추적기

class Point2D:
    """X, Y 좌표 평면 위를 돌아다니는 꼭짓점 객체"""
    def __init__(self, x, y):
        self.x = x
        self.y = y

def calculate_centroid(p1, p2, p3):
    """
    세 꼭짓점 좌표를 무식하게 다 더한 뒤 3으로 나누면(평균),
    마치 중력이 모든 질량을 모아준 것처럼 완벽한 무게중심 좌표가 튀어나옵니다!
    """
    
    # X 좌표들끼리 다 더해서 3으로 나눈다! (X축의 평균)
    center_x = (p1.x + p2.x + p3.x) / 3
    
    # Y 좌표들끼리 다 더해서 3으로 나눈다! (Y축의 평균)
    center_y = (p1.y + p2.y + p3.y) / 3
    
    return Point2D(center_x, center_y)

# 3D 그래픽 엔진 안에 들어온 날아다니는 파편(삼각형)의 좌표들
vertex_A = Point2D(0.0, 0.0)
vertex_B = Point2D(6.0, 0.0)
vertex_C = Point2D(3.0, 9.0)   # 정삼각형 텐트 모양이군요.

print("🌀 폴리곤 추적 엔진 가동: 파편의 회전 축(Centroid)을 계산합니다...")

# 무게중심 좌표 계산 실행!
gravity_center = calculate_centroid(vertex_A, vertex_B, vertex_C)

print("=" * 50)
print(f"✅ 회전 축 좌표 스캔 완료. 이 삼각형의 완벽한 밸런스 포인트는? \n-> [X: {gravity_center.x:.1f}, Y: {gravity_center.y:.1f}]")

출력 결과는 X: 3.0, Y: 3.0이 될 것입니다. 파이썬은 무거운 루트 연산이나 루트 공식을 쓰지 않고 극도로 단순한 파라미터 간의 덧셈과 나눗셈((x1+x2+x3)/3)만으로 중선 교차 증명을 단 $0.001초$ 만에 끝내버립니다. 이 단순한 데이터 축적(Averaging)은 오늘날 모든 머신러닝 데이터의 ‘군집 평균(K-Means)’을 구할 때도 똑같이 적용되는 위대한 알고리즘입니다.

학습 정리

  1. 무게중심 (Centroid): 세 꼭짓점에서 마주 보는 변의 가운데로 내리꽂은 $3$개의 중선이 충돌하는 하나의 점. 삼각형이 손가락 위에서 쓰러지지 않는 절대적 밸런스 포인트.
  2. $2:1$ 분할 비율: 무게중심은 중선을 꼭짓점 방향에서부터 항상 $2:1$의 절대 비율로 칼질하여 나눈다.
  3. 파이썬과 3D 물리학에서는 복잡한 종이접기(수선 내리기)를 하지 않고, 단지 세 꼭짓점 좌표 배열(Array)의 산술 평균(Averaging) 값만 퉁 쳐서 계산하면 그곳이 수학적으로 완벽 무결한 무게중심(G)의 교차점이 된다.
서브목차