题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5979
题目大意:
给出一N个点 每个点距离原点的距离(所有点在一个圆上) 每个点相邻点的角度
题目思路:
可以把这个图形分解为一个一个的三角形,三角形的面积 s=1/2 * a*b*sin ;在这里sin是取的弧度,所以你需要将角度转变为弧度!!!但是我依旧wa了很多发,再仔细想一下,当原点不在凸多边形中!!!脑补如下图
就是这种特殊情况!!!!我们多加了一个三角形的面积!!!再将其减掉即可。
学到的东西:
三角形面积公式,弧度角度的变换,远点不在凸多边中的特殊情况。
代码:
#include <bits/stdc++.h>
using namespace std;
const double pi = 3.1415926;
int main()
{
int n;
double l;
while(~scanf("%d%lf",&n,&l)){
double ans=0;
for(int i=1;i<=n;i++){
double angle;scanf("%lf",&angle);
if(angle>180) ans-=1.0/2.0*l*l*sin((360-angle)*2*pi/360);//剪掉特殊的情况的面积
else ans+=1.0/2.0*l*l*sin(angle*2*pi/360);
}
printf("%.3lf\n",ans);
}
}