문제 소개
이 글에서는 하나의 원 안에 내접한 정사각형, 그리고 그 정사각형 안에 새겨진 가장 큰 를로 삼각형(Reuleaux Triangle)의 넓이를 구하는 방법을 알아봅니다. 참고로 를로 삼각형은 세 개의 원호로 이루어진 등폭 곡선 도형으로, 어느 방향으로 측정하더라도 폭이 같다는 독특한 성질을 가지고 있습니다.
정사각형의 한 변의 길이를 'a', 원의 반지름을 'r'이라고 설정하겠습니다.
수식 유도 과정
정사각형이 원에 내접해 있을 때, 정사각형의 대각선은 원의 지름과 같다는 기하학적 성질을 이용할 수 있습니다. 이를 식으로 표현하면 다음과 같습니다.
2r = a√2
a = r√2
즉, 정사각형의 한 변의 길이는 원의 반지름에 √2를 곱한 값이 됩니다.
다음으로 를로 삼각형의 높이를 h라고 할 때, 정사각형 안에 그릴 수 있는 가장 큰 를로 삼각형의 높이는 정사각형의 한 변의 길이와 같습니다. 따라서 다음 관계가 성립합니다.
h = a = r√2
를로 삼각형의 넓이는 아래 공식으로 계산할 수 있습니다.
A = ((π − √3) × h²) / 2
여기에 h = r√2를 대입하면 최종적으로 다음과 같이 정리됩니다.
A = ((π − √3) × (r√2)²) / 2
= (π − √3) × r²
C++ 구현 예제
위 공식을 C++ 코드로 구현하면 다음과 같습니다. 반지름이 음수로 입력되면 유효하지 않은 값으로 처리하여 -1을 반환하도록 했습니다.
#include <iostream>
#include <cmath>
using namespace std;
float areaReuleaux(float r) { // 원의 반지름 r
if (r < 0) // 음수라면 유효하지 않은 값
return -1;
float area = ((3.1415 - sqrt(3)) * (r * sqrt(2)) * (r * sqrt(2))) / 2;
return area;
}
int main() {
float rad = 6;
cout << "Area of Reuleaux Triangle: " << areaReuleaux(rad);
}
실행 결과
Area of Reuleaux Triangle: 50.7402
반지름이 6인 원에 내접하는 정사각형 안에서 가장 큰 를로 삼각형의 넓이는 약 50.7402로 계산됩니다. 이처럼 정사각형의 대각선과 원의 지름 사이의 관계만 파악하면, 복잡해 보이는 도형 문제도 간단한 공식 대입으로 해결할 수 있습니다.