您的位置:首页 > 其它

算法&&计算几何

2011-11-08 23:22 281 查看
The Circumference of the Circle

Time Limit: 1000MSMemory Limit: 65536K
Total Submissions: 5427Accepted: 3521
Description
To calculate the circumference of a circle seems to be an easy task - provided you know its diameter. But what if you don't?

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
The input will contain one or more test cases. Each test case consists of one line containing six real numbers x1,y1, x2,y2,x3,y3, representing the coordinates of the three points. The diameter of the
circle determined by the three points will never exceed a million. Input is terminated by end of file.
Output
For each test case, print one line containing one real number telling the circumference of the circle determined by the three points. The circumference is to be printed accurately rounded to two decimals.
The value of pi is approximately 3.141592653589793.
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
Ulm Local 1996

计算几何:直接通过公式法即可

题目大意就是:给出圆上三个不共线的点 然后求圆的周长。。。。本题的已知三个点坐标,则三个边长就知道了,现在关键就是怎么把边长和外接圆的半径联系起来 回想初中数学公式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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: