Description
Your task is to write a program, which, given two circles, calculates the area of their intersection with the accuracy of three digits after decimal point.
Input
In the single line of input file there are space-separated real numbers x1 y1 r1 x2 y2 r2. They represent center coordinates and radii of two circles.
Output
The output file must contain single real number - the area.
Sample Input
20.0 30.0 15.0 40.0 30.0 30.0
Sample Output
608.366 求两园相交面积
1 #include2 #include 3 #include 4 using namespace std; 5 double dis(double x1, double y1, double x2, double y2) { 6 return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)); 7 } 8 int main() { 9 double pi = acos(-1);10 double gx, gy, gr, wx, wy, wr;11 while(scanf("%lf %lf %lf %lf %lf %lf", &gx, &gy, &gr, &wx, &wy, &wr) != EOF) {12 double dd = dis(gx, gy, wx, wy);13 if(dd >= (wr + gr) || wr == 0 || gr == 0) printf("0.000\n");14 else if(dd <= fabs(wr - gr)) {15 double rr = min(wr, gr);16 printf("%.3f\n",rr*rr*pi);17 } else {18 double a1 = acos((gr*gr + dd*dd - wr*wr) / (2*gr*dd));19 double a2 = acos((wr*wr + dd*dd - gr*gr) / (2*wr*dd));20 double area1 = (sin(a1*2)*gr*gr+sin(a2*2)*wr*wr)/2;21 double area2 = gr*gr*a1 + wr*wr*a2;22 printf("%.3f\n",(area2-area1));23 }24 }25 return 0;26 }