728x90
반응형
에 이어 계속 평면좌표 이야기를 해보겠음.
이번엔 파푸스 정리(Pappus's theorem)이야. 사실 이 정리는
아폴로니오스의 중선정리( Apollonius' theorem)
라는 이름이 훨씬 많이 쓰이지.
위의 그림은 아폴로니오스 중선정리의 위키피디아 설명에서 그대로 가져온 것이야.
임의의 삼각형 $\triangle ABC$ 가 있고, $I$가 변 $BC$의 중점이면,
$$ AB^2 + AC^2 = 2(AI^2 + BI^2)$$
이 성립한다.
python code로 이것을 증명해볼게
Python Code
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,B,C = Point(x1,y1), Point(x2,y2), Point(x3, y3) # 삼각형의 꼭지점 A,B,C
I = B.midpoint(C) # I는 BC의 중점
eqn1 = A.distance(B) **2 + A.distance(C)**2 # AB^2 + AC^2
eqn2 = 2*( A.distance(I)**2 + B.distance(I)**2) # 2(AI^2 + BI^2)
is_equal = expand(eqn1) == expand(eqn2) # eqn1 과 eqn2가 같은지
print(f'Pappus Theorem is {is_equal}')
답은?
Pappus Theorem is True
이렇게 python을 통하여도 증명할 수 있지. 더 자세하게 위 code이 eqn1, eqn2를 출력해 보면,
print(eqn1)
print(eqn2)
출력결과는
(x1 - x2)**2 + (x1 - x3)**2 + (y1 - y2)**2 + (y1 - y3)**2
2*(x2/2 - x3/2)**2 + 2*(y2/2 - y3/2)**2 + 2*(x1 - x2/2 - x3/2)**2 + 2*(y1 - y2/2 - y3/2)**2
위와 같이 나와. 한눈에 보면, 이게 같은 건지 다른 건지 알 수가 없어. 심지어 python도 같은지 다른지 구분 못하는 거 같더라고. 무슨 뜻이냐면, 위의 메인 code에서 밑에서 두 번째 줄의 expand를 지우잖아? 즉,
is_equal = eqn1 == eqn2 # eqn1 과 eqn2가 같은지
이렇게만 하면 결과가
Pappus Theorem is False
이렇게 나온다는 이야기야.
그래서 expand라는 함수를 쓰는 거야. expand는 말 그대로 위의 식들을 모두 전개해서 좀 명확하게 보여주는 기능이지. 즉,
expand를 쓰면?
print(expand(eqn1))
print(expand(eqn2))
이렇게 출력해 보면,
2*x1**2 - 2*x1*x2 - 2*x1*x3 + x2**2 + x3**2 + 2*y1**2 - 2*y1*y2 - 2*y1*y3 + y2**2 + y3**2
2*x1**2 - 2*x1*x2 - 2*x1*x3 + x2**2 + x3**2 + 2*y1**2 - 2*y1*y2 - 2*y1*y3 + y2**2 + y3**2
한눈에 보기에도 똑같지.
정리
이 글에서 나온 sympy 함수를 정리
expand | 주어진 sympy 식을 전개하는 것! |
여담
사실 파푸스 정리는 스튜어트 정리라는 일반화된 식의 특수한 경우야. 파푸스 정리보다는 인지도가 덜하지만, 나름대로 수학자 이름이 붙은 정리이니 다음 글에서 한번 살펴보겠음!
728x90
반응형
'파이썬으로 풀어보는 고딩수학 > 평면좌표' 카테고리의 다른 글
육각형 속 마름모(@puzzlist의 기하문제) (0) | 2023.12.15 |
---|---|
파푸스 정리의 일반화, 스튜어트 정리 (0) | 2023.12.13 |
삼각형의 무게중심을 sympy로 구하기 (0) | 2023.12.06 |
직각삼각형 만들기 (0) | 2023.12.01 |
삼각형의 외접원 구하기 (0) | 2023.11.29 |
댓글