poj 2546 Circular Area

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 #include <iostream>
 2 #include <math.h>
 3 #include <stdio.h>
 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
");
14         else if(dd <= fabs(wr - gr)) {
15             double rr = min(wr, gr);
16             printf("%.3f
",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
",(area2-area1));
23         }
24     }
25     return 0;
26 }
原文地址:https://www.cnblogs.com/xingkongyihao/p/7614579.html