본문 바로가기
파이썬으로 풀어보는 고딩수학/평면좌표

삼각형의 외접원 구하기

by hustler78 2023. 11. 29.
728x90
반응형

저번 글 두 점에서 거리가 같은 직선상의 점 구하기

 

두 점에서 거리가 같은 직선상의 점 구하기

저번 글에서는 2023.11.17 - [파이썬으로 풀어보는 고딩수학/평면좌표] - 삼각형의 모양 판단? 삼각형의 모양 판단? 2023.11.17 - [파이썬으로 풀어보는 고딩수학] - 프롤로그 프롤로그 살면서 참 수학이

sine-qua-none.tistory.com

에 이어 sympy를 사용한 삼각형 문제풀이를 했지.

 

이번 글에서는 외접원을 구하는 방법을 소개해볼까?  모든 삼각형은 외접원을 가지고, 그 외접원의 중심을 외심이라고 하지.  문제를 소개해볼게.

 

 

문제

세 점 $A(6,1), B(-1,2), C(2,3)$을 꼭짓점으로 하는 $△ABC$의 외심의 좌표와 외접원의 반지름의 길이를 구하여라.

 

 

연습장 풀이

 

 

설명을 위한 그림으로 좌표의 형태나 점의 위치는 신경 쓰지 말길 바라.

원의 중심, 즉 외심을 $(a,b)$라 하고 반지름을 $r$이라고 하면, 이 원의 방정식은

$$(x-a)^2 + (y-b)^2 = r^2$$이고 이 위에 점 $A, B, C$가 있는 형태이지.

 

$$
\begin{align}
 (6-a)^2 + (1-b)^2 & = r^2 \\
 (-1-a)^2 +(2-b)^2 & = r^2 \\
 (2-a)^2 +(-3-b)^2 & = r^2
\end{align}
$$

 

첫번째 식에서 두 번째 식을 변변이 빼서 정리하면

$$ -7a+b=-16$$

두 번째 식에서 셋째식을 변변이 빼서 

$$ 3a+b=4$$를 얻거든. 따라서 

$$ (a, b) = (2,-2)$$

이고 $ r^2 = 25$ 즉 $r=5$가 나오게 되지. 

 

자, 이걸 python 의 sympy를 이용하여 풀어볼게.

 

 

python code

from sympy import *
import matplotlib.pyplot as plt
import numpy as np

a,b = symbols("a b")     # a,b 를 symbol 처리
A,B,C = Point([6,1]), Point([-1,2]), Point([2,3])  # 문제의 세 점 A,B,C
P = Point([a,b])         # 외심의 좌표를 P(a,b)라 한다.

AP = A.distance(P)       # AP 의 길이 : 외접원의 반지름
BP = B.distance(P)       # BP 의 길이 : 외접원의 반지름
CP = C.distance(P)       # CP 의 길이 : 외접원의 반지름

eq1 = Eq(AP,BP)          # AP = BP
eq2 = Eq(AP,CP)          # AP = CP

res = solve([eq1,eq2], {a,b}) # 외접원의 반지름이 서로 같다는 것으로 방정식을 풀면 됨
print(type(res[0]))           # res는 dict형을 원소로 하는 길이1의 list형 따라서
                                res[0]이라는 indexing을 통해 결과 추출
radius = AP.subs(res[0])      # subs 함수를 이용하여 a,b에 구한 값을 각각 넣으면 반지름이 나옴

print(f'center of circle: {res}')
print(f'radius of circle: {radius}')

 

결과를 보면

<class 'dict'>
center of circle:[{a: 2, b: -2}]
radius of circle:5

 

연습장에 풀어본 값들과 똑같지. 

 

 

그런데 sympy 에서는 다른 간단한 함수도 제공해 줘. 아래 더욱더 간단한 코드를 보자고

 

 

 

python code (별해)

from sympy import *
import matplotlib.pyplot as plt
import numpy as np

a, b = symbols("a b")
A, B, C = Point([6, 1]), Point([-1, 2]), Point([2, 3])

tr = Triangle(A, B, C)           # Triangle 함수를 써서 삼각형를 만든다.
center = tr.circumcenter         # 삼각형의 외심 center를 구함
radius = tr.circumradius         # 삼각형의 외심 반지름을 구함
circumcircle = tr.circumcircle   # 삼각형의 외접원의 정보를 구함

print(f'center of circle: {center}')
print(f'radius of circle: {radius}')
print(f'circum circle: {circumcircle}')

 

 

결과를 보면

center of circle: Point2D(2, -2)
radius of circle: 5
circum circle: Circle(Point2D(2, -2), 5)

 

즉 circumcircle이 외접원이라는 뜻이니만큼 python의 선구자들이 웬만큼 만들어 놨어.

 

오늘 나온 함수를 정리해 볼게

 

Triangle 삼각형 객체를 만든다.
Triangle.circumcenter 외접원의 중심
Triangle.circumradius 외접원의 반지름
Triangle.circumcircle 외접원

 

728x90
반응형

댓글