생략
옆면으로 굴릴 경우 원은 빗변을 통해서 그려진다.
작은 원과 큰 원의 빗변을 구하면 된다.
#include <iostream>
#include <cmath>
using namespace std;
double a, b, h, lowH;
const double PI = acos(-1);
int main()
{
ios::sync_with_stdio(0), cin.tie(0);
cout << fixed;
cout.precision(7);
cin >> a >> b >> h;
if (a == b) // 원기둥인 경우
{
cout << -1;
return 0;
}
if (a > b)
{
swap(a, b);
}
lowH = a * h / (b - a);
double bigSize = pow(lowH + h, 2) + pow(b, 2);
double smallSize = a ? pow(lowH, 2) + pow(a, 2) : 0;
cout << (bigSize - smallSize) * PI;
return 0;
}
삼각형의 닮음과 피타고라스 정리를 활용하여 풀면 된다.
삼각형의 닮음으로 높이를 구하고 피타고라스 정리를 활용하여 빗변의 제곱을 구하면 된다. 빗변의 제곱은 원의 넓이에 활용할 수 있으므로 파이를 곱하여서 원의 넓이를 구하면 된다.