您的位置:首页 > 其它

Tell me the area(思维题)

2018-03-27 19:31 330 查看
[align=left]
[/align]
[align=left]Problem Description[/align]    There are two circles in the plane (shown in the below picture), there is a common area between the two circles. The problem is easy that you just tell me the common area.



 
[align=left]Input[/align]There are many cases. In each case, there are two lines. Each line has three numbers: the coordinates (X and Y) of the centre of a circle, and the radius of the circle. 
[align=left]Output[/align]For each case, you just print the common area which is rounded to three digits after the decimal point. For more details, just look at the sample. 
[align=left]Sample Input[/align]
0 0 22 2 1 
[align=left]Sample Output[/align]
0.108题目大意:相交圆的重叠面积,主要分为相离,相交和内含三种情况,将其分别讨论就行了。刚开始w,后来才发现是多组输入,希望这能帮到各位大佬。
注意:求qaq的时候要注意计算顺序,否则会造成计算误差,导致w。#include <iostream>
#include <math.h>
#include <stdio.h>
#define PI acos(-1)
using namespace std;
int main()
{
double x1,x2,y1,y2,r1,r2;
while(~scanf("%lf%lf%lf",&x1,&y1,&r1))
{
scanf("%lf%lf%lf",&x2,&y2,&r2);
double k=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
if(k>=r1+r2)
printf("0.000\n");
else if(k<=fabs(r1-r2)&&k>=0)
if(r1>r2)
printf("%0.3lf\n",PI*r2*r2);
else
printf("%0.3lf\n",PI*r1*r1);
else
{
double h,s,l1,l2,qaq,j;
h=(r1+r2+k)/2;
s=sqrt(h*(h-r1)*(h-r2)*(h-k));//海伦公式啊!
s*=2.0;
l1=acos((k*k+r1*r1-r2*r2)/(2*k*r1));//反三角函数求弧度角
l2=acos((k*k-r1*r1+r2*r2)/(2*k*r2));
qaq=PI*r2*r2*(l2/(2*PI))*2+PI*r1*r1*(l1/(2*PI))*2-s;//两个扇形减去未重叠部分三角形面积
printf("%.3lf\n",qaq);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: