http://poj.org/problem?id=2546
晚上发现鼠标快不行了了!!!鼠标你肿么了,肿么突然就按键不灵了,哭,谁送我一只呀,奖励我舍友一只。哈哈。开玩笑滴~
舍友大怒说“晚上要把英语做完才去睡觉!"
我也大怒说“晚上要把这题A出来才去睡觉!”
然后我做出来了,他还没,哈哈哈哈,哥哥可以洗洗睡啦~
----------------------------------------------准备洗洗睡的分割线----------------------------------------------
大意:
给定两个圆,求他们相交的面积。
纯数学题。。高中的数学题目,以前有做过。。。但我忘光了。哭瞎了。数学渣T T
本来还想用积分的 - -||
圆的位置关系有5种:相离,外切,相交,内切,内含。
相离和外切都为0,
内切和内涵(哈哈)都为小圆。
相交嘛就是两个扇形面积减去一个四边形的面积。
#include<cstdio>
#include<cmath>
const double pi=acos(-1.0);
int main()
{
double x1,y1,r1,x2,y2,r2;
scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&r1,&x2,&y2,&r2);
double dis=sqrt((y2-y1)*(y2-y1) + (x2-x1)*(x2-x1));
if(dis >= r2+r1)
printf("0.000\n");
else if( dis <= fabs(r2-r1))
printf("%.3lf\n",r2>r1? pi*r1*r1: pi*r2*r2);
else
{
double angle1=acos( (r1*r1 + dis*dis - r2*r2 ) / (2 * r1*dis));
double angle2=acos( (dis*dis + r2*r2 - r1*r1) / ( 2 * r2 * dis ));
double s=r1*dis*sin(angle1);
double s1=angle1*r1*r1;
double s2=angle2*r2*r2;
printf("%.3lf\n",s1+s2-s);
}
return 0;
}