题目链接 codeforces 630 P
题意
给定n和r,n表示角的个数,r表示半径,求阴影部分面积
题解
找圆心,将阴影部分切割(做合适的辅助线)
首先,三角形ABO将整个图形等分为 2*n 份,即求S△ABO
AO = r ;(条件已知) ∠AOB = 2π/2n(圆心角被2n个角等分)
现在求∠OAB ∵∠DOE 和∠BOF是对顶角 ∴∠DOE = ∠BOF
又∵∠DOE和∠BOF 被AC平分, ∴∠DOC = ∠AOB
在 △ADC 中 ∵ O 是AC中点 ∴ ∠DOC = 2 * ∠DAC
∵∠DOC = ∠ AOB ∴∠AOB = 2 * ∠BAO = π / n / 2
可知∠OBA = π - ∠AOB - ∠BAO
然后利用正弦定理,求出AB AB/sin(∠AOB) = AO / sin(∠ABO)
S△AOB = 1/2 * AB * AO * sin(∠BAO)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
double n, r, a, b, c, s;
cin >> n >> r;
double PI = atan2(0, -1);
double C = PI / n;
double B = C / 2;
double A = PI - B - C;
a = r;
c = a * sin(C) / sin(A);
s = 0.5 * a * c * sin(B);
printf("%.12lf\n", s * 2.0 * n);
return 0;
}