#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; char endl = '\n'; double eps=0.0000001; 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((A.fi-B.fi)*(A.fi-B.fi)+(A.se-B.se)*(A.se-B.se)); return asin(x/(2*R))*R*R-x*sqrt(R*R-(x*x/4))/2; } double obsah2(pt A, pt B){ double x=sqrt((A.fi-B.fi)*(A.fi-B.fi)+(A.se-B.se)*(A.se-B.se)); return (PI-asin(x/(2*R)))*R*R+x*sqrt(R*R-(x*x/4))/2; } int main(void) { ios_base::sync_with_stdio(false); 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 > 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&&e=2) res+=cross(v[v.size()-1].fi,v[0].fi); res=abs(res)/2; if(v.size()<2){ if(S.fi>A.fi&&S.fiA.se) { if(vzd(A,S)>R) cout << setprecision(9) << PI*R*R << '\n'; else cout << setprecision(9) << (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 << setprecision(9) << obsah2(v[0].fi,v[1].fi) << '\n'; else cout << setprecision(9) << obsah(v[0].fi,v[1].fi) << '\n'; return 0; } int N=v.size(); v.push_back(v[0]); for(i=0;i