題目意思就是,給出三個(gè)點(diǎn)的坐標(biāo),告訴你這三個(gè)點(diǎn)是某個(gè)正多邊形中的三個(gè)點(diǎn),讓你求出這個(gè)正多邊形的面積的最小值狠裹。
我們考慮到這個(gè)正多邊形必然是內(nèi)接在某個(gè)?里面,所以從圓心向這三個(gè)點(diǎn)連線汽烦,我們馬上可以得到三個(gè)角涛菠,這三個(gè)角可以看作是正多邊形內(nèi)角的 某個(gè)倍數(shù),所以我們找到這三個(gè)角的最大公因數(shù)是多少就相當(dāng)于找到了內(nèi)角撇吞,找到了內(nèi)角就相當(dāng)于找到了正多邊形的面積俗冻,期間用到了余弦定理,三角形外接圓半徑和三角形面積的關(guān)系梢夯,海倫公式言疗。
#include<bits/stdc++.h>
using namespace std;
double pi=3.141592653589793238462643;
double pf(double a){
return a*a;
}
double gcd(double a,double b){
if (a<1e-3) return b;
if (b<1e-3) return a;
return gcd(b,fmod(a,b));
}
int main(){
double x1,y1,x2,x3,y2,y3;
cin>>x1>>y1;
cin>>x2>>y2;
cin>>x3>>y3;
double a = sqrt(pf(x1-x2)+pf(y1-y2));
double b = sqrt(pf(x1-x3)+pf(y1-y3));
double c = sqrt(pf(x2-x3)+pf(y2-y3));
double p = (a+b+c)/2;
double r=a*b*c/4/sqrt(p*(p-a)*(p-b)*(p-c));
double alpha=acos((2*pf(r)-pf(a))/2/r/r);
double beta=acos((2*pf(r)-pf(b))/2/r/r);
double gama=2*pi-alpha-beta;
double theta=gcd(gcd(alpha,beta),gama);
printf("%.8lf",sin(theta)*(pi/theta)*r*r);
}