大概是算求出两个圆心角的度数t1,t2,从枚举i边形的圆心角度数t,如果t1,t2均可以整除t说明符合题意,根据公式求出面积,退出循环
#include<bits/stdc++.h>
#define ll long double
#define yyy y1
#define N 200005
#define endl "\n"
#define fi first
#define se second
using namespace std;
const ll mod=1e9+7;
const ll eps=1e-2;
const ll pi=acos(-1.00000);
ll X1,Y1,X2,Y2,X3,Y3;
pair<ll,ll> c;
ll d(ll x1,ll y1,ll x2,ll y2){
return sqrtl((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
ll dq(ll x1,ll y1,ll x2,ll y2){
return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
}
bool ch(ll a,ll b){
if(fmod(a,b)<eps)return 1;
return 0;
}
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
cin>>X1>>Y1>>X2>>Y2>>X3>>Y3;
ll d12=d(X1,Y1,X2,Y2);
ll d23=d(X3,Y3,X2,Y2);
ll d13=d(X3,Y3,X1,Y1);
ll p=(d12+d23+d13)/2;
ll s=(p*(p-d12)*(p-d23)*(p-d13));
d12=dq(X1,Y1,X2,Y2);
d23=dq(X3,Y3,X2,Y2);
d13=dq(X3,Y3,X1,Y1);
ll r=(d12*d23*d13)/(16*s);
ll t1=acos(1-((d12)/(2*r)));
ll t2=acos(1-((d23)/(2*r)));
for(int i=3;i<=100;i++){
ll t=2*pi/i;
if(ch(t1,t)&&ch(t2,t)){
ll x=i*sin(t)*r;
printf("%.6lf",x);
break;
}
cout<<endl;
}
return 0;
}
然而这样的问题是精度不太够,导致取模因为几位数出现了问题,样例都过不去