题解
2024-03-16 21:51:14
发布于:陕西
69阅读
0回复
0点赞
#include<cstdio>
#include<cmath>
const double Pi=acos(-1.0); //π的值
const double EPS=1E-2; //控制精度
struct Point {
double x,y;
}P[3];
double len[3],a[3]; //len为边长,a为圆心角角度。
double Get(int i,int j) { //求两点之间距离
return sqrt((P[i].x-P[j].x)*(P[i].x-P[j].x)+(P[i].y-P[j].y)*(P[i].y-P[j].y));
}
double gcd(double a,double b) { //double类型的最大公约数
if(fabs(b)<EPS)
return a;
if(fabs(a)<EPS)
return b;
return gcd(b,fmod(a,b)); //fmod(a,b), double类型的取模
}
int main() {
double t=0.0,A,r;
for(int i=0;i<3;++i)
scanf("%lf%lf",&P[i].x,&P[i].y);
for(int i=0;i<3;t+=len[i],++i)
len[i]=Get(i,(i+1)%3);
t/=2;
A=sqrt(t*(t-len[0])*(t-len[1])*(t-len[2])); //求三角形面积
r=len[0]*len[1]*len[2]/(4*A); //求三角形外接圆半径
for(int i=0;i<2;++i)
a[i]=acos(1-len[i]*len[i]/(2*r*r)); //求圆心角度数
a[2]=2*Pi-a[0]-a[1]; //为防止误差,最后一个圆心角根据三角形三边作为弦所对的三个圆心角之和为360°求出
t=gcd(a[0],gcd(a[1],a[2])); //求圆心角的最大公约数
printf("%.6lf",(Pi*r*r*sin(t))/t); //求正多边形面积
return 0;
}
这里空空如也
有帮助,赞一个