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

직각삼각형 만들기

by hustler78 2023. 12. 1.
728x90
반응형

이번 글은 삼각형의 외접원 구하기

 

삼각형의 외접원 구하기

저번 글 두 점에서 거리가 같은 직선상의 점 구하기 두 점에서 거리가 같은 직선상의 점 구하기 저번 글에서는 2023.11.17 - [파이썬으로 풀어보는 고딩수학/평면좌표] - 삼각형의 모양 판단? 삼각형

sine-qua-none.tistory.com

에서 이어져. 

 

직선과 직선, 선분과 선분이 수직으로 만나는 문제들은 아주 중요해. 평면 (또는 공간)에 좌표축 기능도 할 수 있고, 또한 피타고라스 정리를 사용하여 선분의 길이랄지,  거리의 최솟값 문제를 해결하는데 많이 쓰이거든.

 

이번엔 수직, 또는 직각과 관련된 문제야.

 

 

문제

좌표평면 위에 두 점 $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 가 참이게끔) 정의하는 것

 

728x90
반응형

댓글