计算圆的周长
Time Limit: 1 Seconds Memory Limit: 32 Mbyte
题目描述:
如果告诉你圆的直径,那么计算圆的周长是非常简单的。但是,这次不告诉你圆的直径。
现给你圆周上三个点的坐标,请你计算圆的周长。
输入描述:
输入包含多组测试数据。每组输入包含6个实数x1,y1,x2,y2,x3,y3,表示圆周上三个点的坐标。
圆的直径不会超过1000000。
输出描述:
对于每组输入,输出圆的周长,结果保留2位小数。(pi的取值为3.141592653589793)
输入样例:
0.0 -0.5 0.5 0.0 0.0 0.5
0.0 0.0 0.0 1.0 1.0 1.0
5.0 5.0 5.0 7.0 4.0 6.0
0.0 0.0 -1.0 7.0 7.0 7.0
50.0 50.0 50.0 70.0 40.0 60.0
0.0 0.0 10.0 0.0 20.0 1.0
0.0 -500000.0 500000.0 0.0 0.0 500000.0
输出样例:
3.14
4.44
6.28
31.42
62.83
632.24
3141592.65
分析:
由正弦定理可知:a/sinA=b/sinB=c/sinC=2R;
由推论得:S=a*b*sinC/2;
周长公式:C=2*pi*R;
由此可知:
C=a*b*c*pi / 2 / S;
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
const double pi=3.141592653589793;
int main()
{
double x1,y1,x2,y2,x3,y3,s,a,b,c,p;
while(scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3)!=EOF)
{
a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*+(y1-y2));
b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*+(y1-y3));
c=sqrt((x2-x3)*(x2-x3)+(y2-y3)*+(y2-y3));
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("%.2lf\n",a*b*c*pi/2/s);
}
return 0;
}