Intersection


Time Limit: 4000/4000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)
Total Submission(s): 1643 Accepted Submission(s): 620


#include<stdio.h>
#include<string.h>
#include<math.h>
#define P acos(-1.0)//定义π 
#define E 1e-6
#define min(a,b) (a>b?b:a)
double dis,r,R;
struct zz
{
	double x,y;
}a,b;
double ll(double x1,double y1,double x2,double y2)
{
	return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
double fun(double r1,double r2)
{
	if(dis>=(r1+r2))
		return 0;
	double s1,s2,ss1,ss2;
	if(dis<=abs(r1-r2))
	{
		r1=min(r1,r2);
		return P*r1*r1;
	}
	s1=(r1*r1+dis*dis-r2*r2)/(2*r1*dis);
	s2=(r2*r2+dis*dis-r1*r1)/(2*r2*dis);
	ss1=acos(s1);
	ss2=acos(s2);
	return ss1*r1*r1+ss2*r2*r2-r1*dis*sin(ss1);
}
int main()
{
	int t;
	int T=1;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%lf%lf",&r,&R);
		scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y);
		dis=ll(a.x,a.y,b.x,b.y);
		if(abs(dis)<E)
		{
			printf("Case #%d: %.6lf\n",T++,P*(R*R-r*r));
			continue;
		}
		double ss=0;
		ss=fun(R,R);
		ss-=2*fun(R,r)-fun(r,r);
		printf("Case #%d: %.6lf\n",T++,ss);
	}
	return 0;
}




Problem Description


Matt is a big fan of logo design. Recently he falls in love with logo made up by rings. The following figures are some famous examples you may know.




hdoj Intersection  5120  (数学计算几何) 求两个相交圆的面积_#include


A ring is a 2-D figure bounded by two circles sharing the common center. The radius for these circles are denoted by r and R (r < R). For more details, refer to the gray part in the illustration below.





hdoj Intersection  5120  (数学计算几何) 求两个相交圆的面积_Java_02


Matt just designed a new logo consisting of two rings with the same size in the 2-D plane. For his interests, Matt would like to know the area of the intersection of these two rings.




Input


The first line contains only one integer T (T ≤ 10 5), which indicates the number of test cases. For each test case, the first line contains two integers r, R (0 ≤ r < R ≤ 10).

Each of the following two lines contains two integers x i, y i (0 ≤ x i, y i ≤ 20) indicating the coordinates of the center of each ring.




Output


For each test case, output a single line “Case #x: y”, where x is the case number (starting from 1) and y is the area of intersection rounded to 6 decimal places.




Sample Input


2 2 3 0 0 0 0 2 3 0 0 5 0




Sample Output


Case #1: 15.707963 Case #2: 2.250778


//题意:


给你两个圆的半径,r,R;


再给你这两个圆的圆心点,让你求出这两个圆的不相交面积。