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;
}
[/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;
}
相关文章推荐
- Tell me the area HDU 1798
- HDU 1798 Tell me the area (计算几何)
- Tell me the area(计算几何--求两圆相交面积)
- HDU 1798 Tell me the area
- ACM--两圆交集的面积--HDOJ 1798--Tell me the area
- hdu---(Tell me the area)(几何/三角形面积以及圆面积的一些知识)
- Tell me the area
- HDU 1798 Tell me the area(计算几何,求相交圆面积)
- HDU 1798 Tell me the area
- HDU1798 Tell me the area(两圆的相交面积)
- hdu 1798 Tell me the area
- hdu 1798 Tell me the area …
- HDU 1798 Tell me the area
- Tell me the area 几何
- hdu1798: Tell me the area
- Tell me the area---hdu1798 (数学 几何)
- HDU 1798 Tell me the area (两圆相交面积)
- HDU-1798 Tell me the area (C++和Java【水】两圆相交求公共面积)
- Tell me the area(计算几何--求两圆相交面积)
- HDU-1798 Tell me the area(数学)