이 글에서는 원 안에 내접하는 정십각형(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)입니다.