#include #include using namespace std; #define PI 3.1415926535 double cutarea(double r, double d) { if (d >= r) return 0; if (d <= -r) return PI * r * r; return acos(d/r)*r*r - sqrt(r*r-d*d)*d; } double cornerarea(double r, double x, double y) { //cout << r << " " << x << " " << y << endl; if (x >= r || y >= r) return 0; if (x <= -r && y <= -r) return PI * r * r; if (x <= -r) return cutarea(r, y); if (y <= -r) return cutarea(r, x); if (x * x + y * y >= r * r) { if (x <= 0 && y <= 0) { return PI * r * r - cutarea(r, -x) - cutarea(r, -y); } if (x <= 0 && y >= 0) { return cutarea(r, y); } if (x >= 0 && y <= 0) { return cutarea(r, x); } return 0; } double res = (4 * x * y + 2 * cutarea(r, x) + 2 * cutarea(r, y) - PI * r * r)/4; //cout << "returning " << res << endl; return res; } int main() { double mx, my, r, ax, ay, bx, by; cin >> mx >> my >> r >> ax >> ay >> bx >> by; ax -= mx; bx -= mx; ay -= my; by -= my; double xu, xd, yu, yd; xu = max(ax, bx); xd = min(ax, bx); yu = max(ay, by); yd = min(ay, by); // cout << xu << " " << xd << " " << yu << " " << yd << "\n"; double circarea = PI * r * r; double xusarea = cutarea(r, xu); double xdsarea = cutarea(r, -xd); double yusarea = cutarea(r, yu); double ydsarea = cutarea(r, -yd); //cout << xusarea << " " << xdsarea << " " << yusarea << " " << ydsarea << "\n"; double c1area = cornerarea(r, xu, yu); double c2area = cornerarea(r, xu, -yd); double c3area = cornerarea(r, -xd, yu); double c4area = cornerarea(r, -xd, -yd); //cout << c1area << " "<< c2area << " "<< c3area << " "<< c4area << "\n"; //cout << circarea << "\n"; double res = circarea - xusarea - xdsarea - yusarea - ydsarea + c1area + c2area + c3area + c4area; if (res < 0) res = 0; printf("%.4f\n", res); return 0; }