Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

원에 내접하는 정십각형의 넓이를 구하는 C++ 프로그램

이 글에서는 원 안에 내접하는 정십각형(decagon)의 넓이를 구하는 방법을 살펴봅니다. 원의 반지름 r이 주어졌을 때, 그 원에 내접하는 정십각형의 넓이를 계산하는 것이 목표입니다.

기하학적 원리

반지름이 r인 원에 정십각형이 내접해 있다고 가정해 보겠습니다. 원의 중심과 정십각형의 인접한 두 꼭짓점을 연결하면 10개의 동일한 삼각형이 만들어지며, 각 삼각형의 중심각은 360° ÷ 10 = 36°입니다.

이 삼각형의 성질을 이용하면 정십각형의 한 변의 길이 a를 다음과 같이 구할 수 있습니다.

a = 2r·sin(18°) = r(√5 − 1) / 2

한 변의 길이가 a인 정십각형의 넓이 공식은 다음과 같습니다.

A = (5 / 2) × a² × √(5 + 2√5)

여기에 앞서 구한 a 값을 대입하고 정리하면, 반지름 r만으로 내접 정십각형의 넓이를 나타낼 수 있습니다.

A = (5 × r² × (3 − √5) × √(5 + 2√5)) / 4

C++ 구현 예제

위 공식을 그대로 코드로 옮기면 됩니다. 반지름이 음수로 입력되는 경우에는 유효하지 않은 값으로 처리하여 -1을 반환하도록 작성했습니다.

#include <iostream>
#include <cmath>
using namespace std;

float area(float r) {
    if (r < 0) // 반지름이 음수이면 유효하지 않음
        return -1;
    float result = (5 * pow(r, 2) * (3 - sqrt(5)) * sqrt(5 + 2 * sqrt(5))) / 4;
    return result;
}

int main() {
    float r = 8;
    cout << "Area : " << area(r);
}

실행 결과

Area : 188.091

반지름이 8일 때 원에 내접하는 정십각형의 넓이는 약 188.09입니다. 참고로 이 값은 5r²·sin(36°) = 5 × 64 × 0.5878 ≈ 188.09와 일치하므로, 공식이 올바르게 적용되었음을 확인할 수 있습니다.

복잡도 분석

이 알고리즘은 주어진 반지름 값에 대해 고정된 수학 연산만 수행하므로 시간 복잡도는 O(1), 공간 복잡도 역시 O(1)입니다.