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

C++로 구현하는 N변 정다각형에 내접하는 가장 큰 원의 면적 계산법

이번 글에서는 N변 정다각형에 내접하는 가장 큰 원, 즉 내접원의 면적을 구하는 방법을 알아보겠습니다. 여기서 다각형의 변의 개수 N과 한 변의 길이 'a'가 주어졌다고 가정합니다.

내접원 면적의 계산 원리

접근 방식은 생각보다 간단합니다. 정다각형은 중심을 기준으로 N개의 합동인 삼각형으로 나눌 수 있으며, 이때 각 삼각형이 중심에서 이루는 각도는 360°/N입니다.

삼각형 하나를 살펴보면, 밑변은 다각형의 한 변의 길이 'a'이고, 꼭짓점에서 밑변까지 내린 수선의 길이가 곧 내접원의 반지름 r이 됩니다. 삼각형을 반으로 나눈 직각삼각형에서 탄젠트(tangent)의 성질을 이용하면 다음 관계식을 얻을 수 있습니다.

tan(180°/N) = (a/2) / r

이 식을 반지름 r에 대해 정리하면 다음과 같습니다.

r = a / (2 × tan(180°/N))

반지름을 구했다면 원의 면적 공식인 π × r² 에 대입하여 내접원의 면적을 계산할 수 있습니다.

C++ 구현 예제

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

float area(float n, float a) {
    if (n < 0 || a < 0) // 입력값이 음수이면 유효하지 않음
        return -1;
    float r = a / (2.0 * tan((180 / n) * 3.14159 / 180)); // 도를 라디안으로 변환 후 탄젠트 적용
    float area = 3.14159 * r * r; // 원의 면적 = π × r²
    return area;
}

int main() {
    float n = 8, a = 4;
    cout << "Area : " << area(n, a);
}

실행 결과

Area : 73.2422

코드 설명

위 코드는 두 개의 매개변수, 즉 변의 개수 n과 한 변의 길이 a를 받아 내접원의 면적을 반환합니다. 먼저 입력값이 음수인 경우 유효하지 않은 입력으로 판단하여 -1을 반환하도록 처리했습니다.

반지름을 계산할 때 주의할 점은 C++의 tan() 함수가 라디안 단위를 사용한다는 것입니다. 따라서 180/n으로 구한 각도에 3.14159/180을 곱해 도(degree)를 라디안(radian)으로 변환한 뒤 탄젠트 값을 구합니다.

예제에서는 변이 8개(정팔각형)이고 한 변의 길이가 4인 경우를 계산했으며, 그 결과 내접원의 면적은 약 73.2422로 출력됩니다. 이 알고리즘은 단순한 수학 공식만 사용하므로 시간 복잡도는 O(1)로 상수 시간 안에 결과를 얻을 수 있습니다.