#include using namespace std; typedef long long ll; typedef long double ld; #define rep(i, a, n) for (int i = (a); i < (n); i++) #define per(i, a, n) for (int i = (n) - 1; i >= (a); i--) #define FOR(i, n) rep(i, 0, (n)) #define fi first #define se second #define pt pair double PI=3.141592653589; double eps=0; pt S;int R; int vzd(pt A,pt B){ return (A.fi-B.fi)*(A.fi-B.fi)+(A.se-B.se)*(A.se-B.se); } double cross(pt A, pt B){ return A.fi*B.se-A.se*B.fi; } double obsah(pt A, pt B){ double x=sqrt(vzd(A, B)); double c,d; if(x/(2*R)<1) c=asin(x/(2*R)); else c=PI/2; if(R*R-(x*x/4)>=0) d=sqrt(R*R-(x*x/4)); else d=0; return c*R*R-x*d/2; } double obsah2(pt A, pt B){ return PI*R*R-obsah(A,B); /*double x=sqrt((A.fi-B.fi)*(A.fi-B.fi)+(A.se-B.se)*(A.se-B.se)); double c,d; if(x/(2*R)<1) c=asin(x/(2*R)); else c=PI/2; if(R*R-(x*x/4)>=0) d=sqrt(R*R-(x*x/4)); else d=0; return (PI-c)*R*R+x*d/2;*/ } int main(void) { ios_base::sync_with_stdio(false); cout << setprecision(9) << fixed; pt A,B,C,D,E,F; double x=0.5; //cout << asin(x) << '\n'; cin >> S.fi >> S.se >> R >> E.fi >> E.se >> F.fi >> F.se; if(E.fi==F.fi||E.se==F.se) {cout << 0.0000 << endl; return 0;} A.fi=min(E.fi,F.fi); A.se=min(E.se,F.se); B.fi=max(E.fi,F.fi); B.se=min(E.se,F.se); C.fi=max(E.fi,F.fi); C.se=max(E.se,F.se); D.fi=min(E.fi,F.fi); D.se=max(E.se,F.se); /*if(E.fi > v; if(vzd(A,S)<=R*R) v.push_back({A, 0}); //if(vzd(A,S)==R*R) {v.push_back({A,true}); if(A.fi!=S.fi-R&&A.fi!=S.fi+R&&A.se!=S.se-R&&A.se!=S.se+R) v.push_back({A,true});} if(R*R>(A.se-S.se)*(A.se-S.se)){ double e,f; e=-sqrt(R*R-(A.se-S.se)*(A.se-S.se))+S.fi; f=sqrt(R*R-(A.se-S.se)*(A.se-S.se))+S.fi; if(e>A.fi+eps&&eA.fi+eps&&f(B.fi-S.fi)*(B.fi-S.fi)){ double e,f; e=-sqrt(R*R-(B.fi-S.fi)*(B.fi-S.fi))+S.se; f=sqrt(R*R-(B.fi-S.fi)*(B.fi-S.fi))+S.se; if(e>B.se+eps&&eB.se+eps&&f(C.se-S.se)*(C.se-S.se)){ double e,f; e=-sqrt(R*R-(C.se-S.se)*(C.se-S.se))+S.fi; f=sqrt(R*R-(C.se-S.se)*(C.se-S.se))+S.fi; if(f>A.fi+eps&&fA.fi+eps&&e(D.fi-S.fi)*(D.fi-S.fi)){ double e,f; e=-sqrt(R*R-(D.fi-S.fi)*(D.fi-S.fi))+S.se; f=sqrt(R*R-(D.fi-S.fi)*(D.fi-S.fi))+S.se; if(f>B.se+eps&&fB.se+eps&&eA.fi&&S.fiA.se) { if(vzd(A,S)>R*R) cout << PI*R*R << '\n'; else cout << (C.se-B.se)*(B.fi-A.fi) << '\n'; } else cout << 0.0000 << '\n'; return 0; } else if(v.size()==2){ if(S.fi>A.fi&&S.fiA.se) cout << obsah2(v[0].fi,v[1].fi) << '\n'; else cout << obsah(v[0].fi,v[1].fi) << '\n'; return 0; } for(i=0;i