-
면적 넓이 구하기Algorithm with C/Math 2020. 9. 9. 18:59
1. 문제
암소가 필드에서 풀을 먹고 있다.
필드에 있는 로프는 두 개의 지주에 묶여 있고, 암소는 링으로 로프에 묶여 있다.
그래서 암소는 로프의 어떤 지점으로도 이동이 가능하다.
당신의 일은 암소가 가서 풀을 먹을 수 있는 필드의 면적을 구하는 것이다.
[그림 ]
로프의 두께는 없고, 암소는 포인트 물체이고 링의 반지름과 지주의 두께는 무시할 수 있다.
pi = 2 * arccos(0) 로 계산하고 ( 각은 라디언 ) double 형을 사용하라.
입력
각 줄에는 두 정수 D ( 0 <= D <= 1000 ) 와 L ( 0 <= L <= 1500 ) 이 주어진다.
D는 두 지주 사이의 거리 이고, L은 로프의 길이이다. ( 단위는 feet )
출력
소수3자리까지 면적을 출력한다.
입출력 예
입력
10 12
출력
62.517
입력
23 45
출력
1366.999
입력
12 18
출력
189.670
2. 문제 분석
위의 문제는 사실 수학적 문제이다.
위의 [그림]을 아래와 같이 된다.
[그림 2 ]
위 그림에서 소가 움직일수 있는 면적은 곧, 타원의 면적이다.
[그림 2]의 타원을 수학적으로 그려보자.
[ 그림 3 ]
먼저 해야 할 일은 장축과 단축을 구하는 일이다.
(1). 장축 구하기
(2). 단축 구하기
단축을 구하기 전에 [그림 3]을 다음과 같이 변형시켜보자.
[그림 4]
위의 그림은 [그림 3]의 점F를 이동시킨 것이다.
(3). 타원의 넓이 구하기
3. 문제 풀이 방법
프로그램을 짤 때, 가이드 라인을 잡아보자.
먼저, 변수부터 선언해보자.
Interval : 두 지주 사이의 거리
Length : 로프의 길이
MaxRadius : 장축
MinRadius : 단축(1). 장축의 길이 구하기
MaxRadius = Length / 2
(2). 단축의 길이 구하기
MinRadius = sqrtf( ( MaxRadius * MaxRadius ) - ( Interval / 2 )*( Interval / 2 ) );
이다.
4. 구현
프로그램 실행결과
5. 소스 파일
'Algorithm with C > Math' 카테고리의 다른 글
세 점의 방향 판단 (0) 2020.09.11 벡터의 외적(Cross product) (0) 2020.09.11 점과 점의 각도(삼각함수의 역함수를 이용) (0) 2020.09.10 API를 활용해서 삼각비를 통한 각도 구하기 (0) 2020.09.10 각도와 호도법의 변환 (0) 2020.09.10