计算几何专题(计算两圆相交面积)
2017-07-31 16:53
323 查看
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. Input
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.
Output
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.
Sample Input
0 0 2
2 2 1
Sample Output
0.108
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
#define PI acos(-1.0)
int main(){
double a1,b1,r1,a2,b2,r2,d;
double A1,A2,s1,s2,s;
while(~scanf("%lf%lf%lf%lf%lf%lf",&a1,&b1,&r1,&a2,&b2,&r2)){
d=sqrt((a2-a1)*(a2-a1)+(b2-b1)*(b2-b1)); //求圆心距
if(d>=r1+r2) printf("0.000\n"); //两圆相离或相外切
else if(d<=fabs(r1-r2) && d>=0) { //内切
if(r1>r2) printf("%0.3lf\n",PI*r2*r2);
else printf("%0.3lf\n",PI*r1*r1);
}
else
{
A1=2*acos((d*d+r1*r1-r2*r2)/(2*d*r1)); //求以圆心为顶点与两圆交点连线的角
A2=2*acos((d*d+r2*r2-r1*r1)/(2*d*r2));
s1=0.5*r1*r1*sin(A1)+0.5*r2*r2*sin(A2);
s2=A1/2*r1*r1+A2/2*r2*r2;
s=s2-s1;
printf("%0.3lf\n",s);
}
}
return 0;
}
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.
Output
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.
Sample Input
0 0 2
2 2 1
Sample Output
0.108
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
#define PI acos(-1.0)
int main(){
double a1,b1,r1,a2,b2,r2,d;
double A1,A2,s1,s2,s;
while(~scanf("%lf%lf%lf%lf%lf%lf",&a1,&b1,&r1,&a2,&b2,&r2)){
d=sqrt((a2-a1)*(a2-a1)+(b2-b1)*(b2-b1)); //求圆心距
if(d>=r1+r2) printf("0.000\n"); //两圆相离或相外切
else if(d<=fabs(r1-r2) && d>=0) { //内切
if(r1>r2) printf("%0.3lf\n",PI*r2*r2);
else printf("%0.3lf\n",PI*r1*r1);
}
else
{
A1=2*acos((d*d+r1*r1-r2*r2)/(2*d*r1)); //求以圆心为顶点与两圆交点连线的角
A2=2*acos((d*d+r2*r2-r1*r1)/(2*d*r2));
s1=0.5*r1*r1*sin(A1)+0.5*r2*r2*sin(A2);
s2=A1/2*r1*r1+A2/2*r2*r2;
s=s2-s1;
printf("%0.3lf\n",s);
}
}
return 0;
}
相关文章推荐
- HDU 3264 Open-air shopping malls [相交圆面积+二分查找]【计算几何】
- 计算几何 ( 求两圆相交面积 )——Open-air shopping malls ( HDU 3264 )
- HDU 1798 Tell me the area(计算几何,求相交圆面积)
- hdoj.5130 Signal Interference【计算几何+圆与多边形相交面积】 2015/08/17
- hdu 3264 09 宁波 现场 E - Open-air shopping malls 计算几何 二分 圆相交面积 难度:1
- Tell me the area(计算几何--求两圆相交面积)
- hdoj Intersection 5120 (数学计算几何) 求两个相交圆的面积
- Educational Codeforces Round 2D. Area of Two Circles' Intersection(计算几何+圆相交的面积)
- hdoj.2892 area【计算几何+圆与多边形相交面积】 2015/08/17
- 计算几何 求相交圆面积(余弦定理)
- POJ 2546 Circular Area【计算几何,计算两圆相交面积】
- hdu 3264 Open-air shopping malls 计算几何 相交圆的面积 二分
- POJ 2546 Circular Area(计算几何 两圆相交面积)
- Gym 100952J&&2015 HIAST Collegiate Programming Contest J. Polygons Intersection【计算几何求解两个凸多边形的相交面积板子题】
- Tell me the area(计算几何--求两圆相交面积)
- HDU 3264 Open-air shopping malls (计算几何-圆相交面积)
- hdoj.4404 Worms【计算几何+圆与多边形相交面积】 2015/08/17
- HDU 3264 Open-air shopping malls (计算几何-圆相交面积)
- HDU 5858 Hard problem 2016多校10 1002 [相交圆面积]【计算几何】
- hdoj.5120 Intersection【计算几何-两圆相交面积】 2015/08/01