题目链接http://codeforces.com/problemset/problem/1/C
一道几何题以前高中学的三角形的知识(好吧,有的结论还是看大神们写的)
要用到的知识注释了
注意用正玄定理的时用两条较小边带入公式
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define PI acos(-1)
#define INF 0.01
using namespace std;
double gcd_float(double x ,double y ) // float gcd 求法。
{
return x < INF ? y : gcd_float(fmod(y,x),x);
}
int main()
{
double x1 , x2 , x3 , y1 , y2 ,y3;
while(cin>>x1>>y1>>x2>>y2>>x3>>y3)
{
double len1 = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
double len2 = sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
double len3 = sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));
double p = (len1 + len2 + len3)/2;
double s = sqrt(p * (p-len1) * (p-len2) * (p-len3));//海伦公式求三角形面积。
double r = len1 * len2 * len3 / (4 * s);
//三角形三边面积和外接圆的关系 S=abc/(4r);
//三角形三边面积和内切圆的关系 S=r*(a+b+c);
double K;
if(len1>len3)
{
K=len1;
len1=len3;
len3=K;
}
if(len2>len3)
{
K=len2;
len2=len3;
len3=K;
}
double A = 2 * asin(len1 / (2 * r)) ;
double B = 2 * asin(len2 / (2 * r));
double C = 2 * PI - A - B;
double flag = gcd_float(gcd_float(A ,B),C);
double ans = PI * r * r * sin(flag) / flag ;
printf("%.6lf\n", ans);
}
return 0;
}