이번 글은 삼각형의 외접원 구하기
에서 이어져.
직선과 직선, 선분과 선분이 수직으로 만나는 문제들은 아주 중요해. 평면 (또는 공간)에 좌표축 기능도 할 수 있고, 또한 피타고라스 정리를 사용하여 선분의 길이랄지, 거리의 최솟값 문제를 해결하는데 많이 쓰이거든.
이번엔 수직, 또는 직각과 관련된 문제야.
문제
좌표평면 위에 두 점 $A(0,2), B(1,5)$가 있다. 점 $P$가 직선 $y=1$위를 움직일 때, $△ABC$가 직각삼각형이 되도록 하는 점 $P$의 좌표를 구하여라.
그림으로 그려볼까?
그림으로 대충 그려봤을 때, 직각 삼각형이 나오는 경우는 두 가지 정도 있는 것 같아.
- $\angle A$가 직각인 경우
- $\angle B$가 직각인 경우
각 $\angle P$가 직각인 경우가 있을지 모르겠는데, 그것도 검증을 해 봐야지.
연습장 풀이
자, 위 문제는 세 경우로 나뉘어. $\angle A$가 직각인 경우, $\angle B$가 직각인 경우, 그리고 각 $\angle P$가 직각인 경우!
각 $\angle A$가 직각일 때,
피타고라스 정리에 의해 $PA^2 + AB^2 = PB^2$ 이 성립하고,
$$ a^2 + 1^2 + 1^2 +3^2 = (a-1)^2 + 4^2$$ 이어서 $a=3$을 얻게 되지.
각 $\angle B$가 직각일 때,
피타고라스 정리에 의해 $PB^2 + AB^2 = PA^2$ 이 성립하고,
$$ (a-1)^2 + 4^2 + 1^2 +3^2 = a^2 + 1^2$$ 이어서 $a=13$ 이 나오지. 마지막으로,
각 $\angle P$가 직각일 때,
마찬가지로, $PA^2 + PB^2 = AB^2$ 이 성립하고,
$$ a^2+ 1^2 +(a-1)^2 + 4^2 = 3^2+ 1^2$$인데, 이를 정리하면
$$a^2- a+4 =0\tag{1}$$ 이 나와. 그런데 좌변의 식은 $(a-\frac12)^2 + \frac{15}{4}$, 즉 양수의 합이므로 0이 나올 수가 없어(물론 $a$가 복소수라면 해를 구할 수는 있겠지만, 좌표평면에 점으로서는 부적격!)
종합해 보면 $a=3, 13$ 두 가지가 답이 될 수 있어. 그럼 이를 python으로 해결해 볼게.
Python code
위에서 설명한 대로 어떤 각이 직각이냐로 나눠서 풀면 좋지.
from sympy import *
import matplotlib.pyplot as plt
import numpy as np
a = symbols("a", real=True)
A, B = Point([0, 2]), Point([1, 5]) # 문제의 점 A,B 정의
P = Point([a, 1]) # P의 좌표는 P(a,1)이라 쓸 수 있다.$y=1$위에 있으므로
AB = A.distance(B)
AP = A.distance(P)
BP = B.distance(P)
# 어떤 각이 직각인지 모르는 상태이므로 상황을 나눠서 풀이한다.
# 만일 A가 직각이라면, AB^2 + AP^2 = BP^2 이 성립한다.
eq = Eq(AB ** 2 + AP ** 2, BP ** 2)
res = solve(eq, a)
print(f'value of a when A is a right angle: {res}')
# 만일 B가 직각이라면, AB^2 + BP^2 = AP^2 이 성립한다.
eq = Eq(AB ** 2 + BP ** 2, AP ** 2)
res = solve(eq, a)
print(f'value of a when B is a right angle: {res}')
# 만일 P가 직각이라면, AP^2 + BP^2 = AB^2 이 성립한다.
eq = Eq(AP ** 2 + BP ** 2, AB ** 2)
res = solve(eq, a)
print(f'value of a when P is a right angle: {res}')
결과를 볼까?
value of a when A is a right angle: [3]
value of a when B is a right angle: [13]
value of a when P is a right angle: []
결과들을 보니, res 값이 list 형으로 출력되는 걸 알 수 있어. [3] , [13] 등 꺽쇠괄호로 묶어진 것을 list라고 생각하면 됩니다. 세 번째 결과를 봐봐. 빈 괄호 [ ]로 출력됐지? 답이 없다는 이야기야. 즉 P가 직각인 상황은 발생하지 않는다는 이야기지.
여기서 주목할 점은
a = symbols("a", real=True)
이야. a를 기호로 정의하기 위해 symbols를 썼는데, real = True 라는 조건을 달았어. 이는 a 기호는 실수를 나타낸다는 의미야. 만일 이 조건을 생략하고
a = symbols("a")
이렇게만 코딩을 하면, 결과는 다음과 같아.
value of a when A is a right angle: [3]
value of a when B is a right angle: [13]
value of a when P is a right angle: [1/2 - sqrt(15)*I/2, 1/2 + sqrt(15)*I/2]
와우! 세 번째 식이 빈 괄호 []가 아니고, 어떤 복잡한 숫자가 출력이 되는구먼, 근데 결괏값을 보니
I (아이)
라는 대문자가 곁들어져 있네. 이것은 바로 허수
$$ I= \sqrt{-1} :=i $$
를 나타내는 문자야. 수 체계를 복소수까지 확대시켜 주는 가상의 수이지. 아닌 게 아니라 식(1)에 근의 공식을 써보면
$$ a = \frac{1\pm \sqrt{15}i}{2} $$
야. 이거는 복소수지. 이 숫자가 좌표가 될 순 없어.
정리
이 글에서 나온 것 중 중요한 것을 정리해 보면
a= symbols("a", real = True) | 기호를 정의하되 조건대로 (즉, real number 가 참이게끔) 정의하는 것 |
'파이썬으로 풀어보는 고딩수학 > 평면좌표' 카테고리의 다른 글
파푸스의 중선 정리 with Sympy (0) | 2023.12.13 |
---|---|
삼각형의 무게중심을 sympy로 구하기 (0) | 2023.12.06 |
삼각형의 외접원 구하기 (0) | 2023.11.29 |
두 점에서 거리가 같은 직선상의 점 구하기 (0) | 2023.11.28 |
삼각형의 모양 판단? (0) | 2023.11.17 |
댓글