ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 면적 넓이 구하기
    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 /  )*( Interval / 2 ) );

    이다. 

     

    4. 구현

    프로그램 실행결과

     

    5. 소스 파일

    main.c
    0.00MB

     

     

     

     

     

     

    댓글

Designed by Tistory.