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

정삼각형에 내접한 정사각형 안에 그릴 수 있는 가장 큰 르로 삼각형의 넓이

문제 개요

이 글에서는 정삼각형에 내접한 정사각형 내부에 그릴 수 있는 가장 큰 르로 삼각형(Reuleaux Triangle)의 넓이를 구하는 방법을 알아봅니다.

르로 삼각형은 세 개의 원호로 이루어진 곡선 삼각형으로, 어느 방향으로 재더라도 폭이 항상 일정한 성질을 가진 대표적인 등폭 곡선입니다. 이러한 특성 때문에 정사각형 안에 가장 크게 배치할 때 르로 삼각형의 높이 h는 정사각형의 한 변의 길이 x와 같아집니다.

편의상 정삼각형의 한 변의 길이를 a, 정사각형의 한 변의 길이를 x, 르로 삼각형의 높이를 h라고 정의합니다.

x 값 유도하기

정삼각형의 높이는 (√3 / 2)a입니다. 정사각형이 정삼각형의 밑변 위에 놓이고 윗쪽 두 꼭짓점이 삼각형의 두 변에 닿는다고 할 때, 닮은 삼각형의 비를 이용하면 다음 관계식을 얻습니다.

x = a · H / (a + H), 단 H = (√3 / 2)a

이 식을 정리하면 x의 값은 다음과 같습니다.

x = √3·a / (2 + √3) ≈ 0.464a

르로 삼각형의 넓이 공식

르로 삼각형의 높이는 정사각형의 한 변과 같으므로 h = x = 0.464a입니다. 폭이 h인 르로 삼각형의 넓이는 다음 공식으로 계산됩니다.

A = ((π − √3) / 2) × h²

여기에 h = 0.464a를 대입하면 최종 넓이 공식은 다음과 같습니다.

A = ((π − √3) / 2) × (0.464a)²

C++ 예제 코드

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

float areaReuleaux(float a) { // 삼각형의 한 변의 길이는 a
    if (a < 0) // a가 음수이면 유효하지 않음
        return -1;
    float area = ((3.1415 - sqrt(3)) * (0.464*a) * (0.464*a)) / 2;
    return area;
}

int main() {
    float side = 5;
    cout << "Area of Reuleaux Triangle: " << areaReuleaux(side);
}

실행 결과

Area of Reuleaux Triangle: 3.79311

복잡도 분석

이 알고리즘은 주어진 변의 길이 a에 대해 상수 번의 산술 연산만 수행하므로 시간 복잡도는 O(1), 추가로 사용하는 메모리도 상수 공간이므로 공간 복잡도 역시 O(1)입니다.