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;
}