직각 삼각형의 빗변과 넓이가 있다고 가정하고 이 삼각형의 밑변과 높이를 찾아야 합니다. 불가능하면 False를 반환합니다.
따라서 입력이 hypo =10, area =24와 같으면 출력은 (6, 8)이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- hypo_sq :=하이포 * 하이포
- s :=(hypo_sq / 2.0)의 제곱근
- maxArea :=밑변 s와 빗변 빗변을 사용하여 삼각형의 면적 계산
- 영역> maxArea이면
- 거짓을 반환
- 왼쪽 :=0.0, 오른쪽 :=s
- 동안 |오른쪽 - 왼쪽|> 0.000001, do
- 기본 :=(왼쪽 + 오른쪽) / 2.0
- 밑변 s와 빗변 하이포를 사용하는 삼각형의 넓이>=넓이이면
- 오른쪽 :=기본
- 그렇지 않으면
- 왼쪽 :=베이스
- 높이:=(hypo_sq - base*base)의 제곱근 및 가장 가까운 정수로 반올림
- 밑수의 가장 가까운 정수로 반올림
- 리턴 베이스 및 높이
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시 코드
from math import sqrt def calculate_area(b, h): hei = sqrt(h*h - b*b); return 0.5 * b * hei def solve(hypo, area): hypo_sq = hypo * hypo s = sqrt(hypo_sq / 2.0) maxArea = calculate_area(s, hypo) if area > maxArea: return False left = 0.0 right = s while abs(right - left) > 0.000001: base = (left + right) / 2.0 if calculate_area(base, hypo) >= area: right = base else: left = base height = round(sqrt(hypo_sq - base*base)) base = round(base) return base, height hypo = 10 area = 24 print(solve(hypo, area))
입력
10, 24
출력
(6, 8)