#include using namespace std; double segint(double x, double r, double uy, double dy) { double up = sqrt(r * r - x * x); double bot = -up; double ups = min(up, uy); double bots = max(bot, dy); if (bots < ups) { return ups - bots; } else return 0; } int main(void) { // LONG DOUBLE?! double x, y, r, ax, ay, bx, by; cin >> x >> y >> r >> ax >> ay >> bx >> by; ax -= x; bx -= x; ay -= y; by -= y; double lx = min(ax, bx); double rx = max(ax, bx); double uy = max(ay, by); double dy = min(ay, by); double steps = 10000000; double sum = 0; lx = max(lx, -r); rx = min(rx, r); double stepsize = (rx - lx)/steps; for (int i = 0; i < steps; i++) { double x = lx + i * stepsize; double a = segint(x, r, uy, dy); double b = segint(x + stepsize, r, uy, dy); sum += (a+b)/2 * stepsize; } printf("%0.10f\n", sum); }