#include #include #include #include #define PI 3.14159265 using namespace std; double X1,Y1, X2, Y2; double R1,r1, R2, r2; double area = 0; double circleArea(double r){ return PI * r * r; } double getDistance(double x1, double x2, double y1, double y2){ return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)); } double max(double a, double b){ if(a > b) return a; else return b; } double getLenseArea(double d, double rad1, double rad2){ if(d >= rad1 + rad2) return 0; double h1 = (d*d + rad1*rad1 - rad2*rad2) / (2*d*rad1); double h2 = (d*d - rad1*rad1 + rad2*rad2) / (2*d*rad2); double area = rad1*rad1 * acos(h1) + rad2*rad2*acos(h2); double b = (-d+rad1+rad2)*(d+rad1-rad2)*(d-rad1+rad2)*(d+rad1+rad2); area -= 0.5*sqrt(b); return area; } int main(){ ifstream input; FILE * output; input.open("circles.in", ios::in); input >> X1 >> Y1 >> r1 >> R1; input >> X2 >> Y2 >> r2 >> R2; area += circleArea(R1); area += circleArea(R2); area -= circleArea(r1); area -= circleArea(r2); double D = getDistance(X1,X2,Y1,Y2); area -= getLenseArea(D,R1,R2); area -= getLenseArea(D,r1,r2); area += getLenseArea(D,r1,R2); area += getLenseArea(D,r1,R2); output = fopen("circles.out", "w"); fprintf(output, "%f", area); return 0; }