Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 5427 | Accepted: 3521 |
Description
You are given the cartesian coordinates of three non-collinear points in the plane.
Your job is to calculate the circumference of the unique circle that intersects all three points.
Input
Output
Sample Input
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
Sample Output
3.14
4.44
6.28
31.42
62.83
632.24
3141592.65
Source
计算几何:直接通过公式法即可
题目大意就是:给出圆上三个不共线的点 然后求圆的周长。。。。本题的已知三个点坐标,则三个边长就知道了,现在关键就是怎么把边长和外接圆的半径联系起来 回想初中数学公式r = abc/4s s表示三角形的周长,a,b,c,分别为三条边
s = (p(p -a)(p-b)(p -c)) ^(1/2)
p = a+b+c
#include<iostream>
#include<cstdio>
#include<cmath>
#define pi 3.141592653589793
using namespace std;
long double x1,x2,x3;
long double Y1,Y2,Y3;
double a,b,c;
double S,s;
double d;
double branch(double x1,double y1,double x2,double y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
double hailun(double a,double b,double c)
{
double tem=(a+b+c)/2;
return sqrt(tem*(tem-a)*(tem-b)*(tem-c));
}
int main()
{
while(scanf("%lf%lf%lf%lf%lf%lf",&x1,&Y1,&x2,&Y2,&x3,&Y3)!=EOF)
{
a=branch(x1,Y1,x2,Y2);
b=branch(x2,Y2,x3,Y3);
c=branch(x1,Y1,x3,Y3);
s=hailun(a,b,c);
d=a*b*c/2/s;
S=pi*d;
printf("%.2lf\n",S);
}
return 0;
}