10991:Region
問題文
http://uva.onlinejudge.org/external/109/10991.html
3つの円の半径が与えられる。図のように3つの円に囲まれた部分の面積を求めよ。
3つの円の中心を頂点とする三角形の面積から、その三角形の内部の扇型の面積を引いてやればよい。三角形の面積はヘロンの公式で求めて、扇形の面積はrθ/2で求めた。扇形のθは余弦定理で求めた。
#include<iostream> #include<cmath> #include<algorithm> #include<vector> #include<map> #include<cstdio> double EPS = 1e-10; double PI = 3.1415926535; using namespace std; double angle(double a,double b,double c){ return acos((a*a+c*c-b*b)/(2.0*a*c)); } int main(void){ int n; cin >> n; while(n--){ double ar,br,cr; cin >> ar >> br >> cr; double a,b,c; a=br+cr,b=cr+ar,c=ar+br; double s=(a+b+c)/2; double T=sqrt(s*(s-a)*(s-b)*(s-c)); double A=angle(b,a,c); double B=angle(a,b,c); double C=angle(a,c,b); double sa=A*ar*ar/2; double sb=B*br*br/2; double sc=C*cr*cr/2; printf("%.6f",T-sa-sb-sc); cout << endl; } return 0; }