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; }