思路:分为三种情况,第一种是圆的半径大于外接圆的半径,第二种是圆的半径小于内接圆的半径,第三种是圆的半径在两圆之间。前两种很好计算,第三种需要求出正多边形的面积,加上多出来的n个弓形的面积,需要开long double。
#include <bits/stdc++.h>
#define double long double
using namespace std;
double n,l,r;
const double pi=acos(-1.0);
int main()
{
scanf("%Lf %Lf %Lf",&n,&l,&r);
double ang=pi/n;
if(r>l){
printf("%.2Lf",pow(r,2)*pi);
}
else{
if(r<=l*cos(ang)){
printf("%.2Lf",n*pow(l,2)*sin(ang)*cos(ang));
}
else{
double th=2*acos(l*cos(ang)/r);
printf("%.2Lf",n*pow(l,2)*sin(ang)*cos(ang)+n*0.5*r*r*(th-sin(th)));
}
}
}