에 이어서 또 삼각형에 대한 이야기를 해볼게. 이번엔
삼각형의 무게중심
에 대한 주제로 이야기를 해볼까 해.
삼각형의 무게중심
삼각형의 무게중심은 각 꼭짓점에서 대변의 이등분점에 내린 직선들의 교점이야. 이런 직선들은 세 개가 나오는데, 신기하게도 한 점에서 만나게 되지. 이게 바로 무게중심!
보통 우리는 무게중심의 공식을
한 꼭지점과 대변의 중점을 2:1로 내분한 점
으로 알고 있어. 즉
$A(x_1, y_1)$과 $BC$의 중점인 $\left( \frac{x_2+x_3}{2}, \frac{y_2+y_3}{2} \right)$ 를 2:1로 내분해 보도록 하자.
내분점은
$$ \left( \frac{2 \frac{x_2+x_3}{2} + x_1}{3}~,~ \frac{2\frac{y_2+y_3}{2}+y_1}{3} \right),$$ 즉,
$$ \left( \frac{x_1+x_2+x_3}{3}~,~ \frac{y_1+y_2+y_3}{3} \right) \tag{1}$$
이지.
Python Code
아래는 무게중심의 정의, 즉 세 각에서 각각의 대변의 중점으로 연결하는 선분들이 만나는 교차점이 무게중심이라는 사실을 이용해 보는 코드야.
from sympy import *
x1, x2, x3 = symbols("x1 x2 x3")
y1, y2, y3 = symbols("y1 y2 y3")
# 삼각형 ABC의 점 A,B,C 를 각각 아래와 같이 정의
A = Point([x1, y1]) # A(x1,y1)
B = Point([x2, y2]) # B(x2,y2)
C = Point([x3, y3]) # C(x3,y3)
BC_middle = B.midpoint(C) # B와 C의 중점 :BC_middle
line1 = Line(A, BC_middle) # A와 BC_middle 을 잇는 직선1
AC_middle = A.midpoint(C) # A와 C의 중점을 AC_middle 이라 정의
line2 = Line(B, AC_middle) # B와 AC_middle을 잇는 직선2
pt = line1.intersection(line2) # 직선1과 직선2의 교차점을 pt라 한다. 주의: pt는 list형
print(f'center G of triangle : {pt[0]}') #pt가 list형이므로 pt[0]으로 index로 값 추출
print(f'line CG meets AB at the point {Line(pt[0], C).intersection(Line(A,B))}')
# pt[0]라는 점과 C를 연결하는 직선이, AB와 만나는 점을 찍어본다
# 이게 과연 AB의 중점이 나올까?
결과를 보자면!
center G of triangle : Point2D(x1/3 + x2/3 + x3/3, y1/3 + y2/3 + y3/3)
line CG meets AB at the point [Point2D(x1/2 + x2/2, y1/2 + y2/2)]
위와 같이 나오고, 첫 번째 결과를 보자고. 식(1)과 똑같지?
두 번째 결과는 위에서 말했듯이, 점 $C$에서 $G$를 잇는 직선이 선분 $AB$와 만나는 점을 구해본 거야. 결과가
$$ \left( \frac{x_1+x_2}{2}~,~ \frac{y_1+y_2}{2} \right)$$
이고 이것은 바로 선분 $AB$의 중점이지!
역으로 말해 $AB$의 중점과 $C$를 잇는 선분은 바로 위에서 구한 점 pt[0], 즉, $G$를 지난다는 애기지.
주의할 점
위의 코딩을 할 때, pt를 출력해 보면,
pt = line1.intersection(line2)
print(pt)
출력결과가
[Point2D(x1/3 + x2/3 + x3/3, y1/3 + y2/3 + y3/3)]
위와 같이 list 형을 나타내는 꺾쇠 기호에 둘러싸여서 나와. list형을 반환한다는 이야기야. 그래서 이 list형의 원소를 다루고 싶다면 pt[0]가 같이 index를 매칭하여 끄집어내 줘야 한다는 것!
그런데 당연스럽게도(?) 무게중심은 삼각형의 중요한 내용 중 하나니, 왠지 python이 내장함수로 제공해 줄 것 만 같아. 바로 다음과 같이!
무게중심 - python 함수
from sympy import *
import matplotlib.pyplot as plt
import numpy as np
x1, x2, x3 = symbols("x1 x2 x3")
y1, y2, y3 = symbols("y1 y2 y3")
A = Point([x1, y1])
B = Point([x2, y2])
C = Point([x3, y3])
tr = Triangle(A,B,C) # 점 A,B,C로 삼각형 구성
pt = tr.centroid # centriod라는 함수를 이용하여 무게중심 산출
print(pt)
결과는?
Point2D(x1/3 + x2/3 + x3/3, y1/3 + y2/3 + y3/3)
오! 바로 무게중심 공식이 나오는구먼. 게다가 list형도 아니고 간결하게 Point2D 형으로 나오네!
정리
이 글에서 나온 함수나 중요사항 정리.
A.midpoint(B) | 점 A와 B의 중점 A,B는 Point 형 |
Triangle.centroid | Triangle의 무게중심 |
'파이썬으로 풀어보는 고딩수학 > 평면좌표' 카테고리의 다른 글
파푸스 정리의 일반화, 스튜어트 정리 (0) | 2023.12.13 |
---|---|
파푸스의 중선 정리 with Sympy (0) | 2023.12.13 |
직각삼각형 만들기 (0) | 2023.12.01 |
삼각형의 외접원 구하기 (0) | 2023.11.29 |
두 점에서 거리가 같은 직선상의 점 구하기 (0) | 2023.11.28 |
댓글