The Circumference of the Circle

Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 6334 Accepted: 4003

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
解:
这道题我使用的是初等几何的知识,设a = AB间的距离,b = BC间的距离,c = CA之间的距离,p = (a + b + c) / 2,根据海伦公式,面积s = sqrt(p * (p – a) * (p – b) * (p – c)),外接圆的直接d = a * b * c / 2 / s,外接圆的周长l = d * π。然后我们在程序中需要将变量设置为double类型,不要设置float,题目给的π太长了,否则会WA。
#include <stdio.h>
#include <math.h>
int main()
{
	double x1, y1, x2, y2, x3, y3, a, b, c, p, s, d, l;
	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((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
		p = (a + b + c) / 2;
		s = sqrt(p * (p - a) * (p - b) * (p - c));
		d = a * b * c / 2 / s;
		l = d * 3.141592653589793;
		printf("%.2f\n", l);
	}
	return 0;
}
Result Memory Time Language Code Length
Accepted 180K 0MS C++ 537B

 

Tonitech版权所有 | 转载请注明出处: http://www.tonitech.com/1764.html

发表评论