The circumference of the Circle
Time Limit: 1000MS |
|
Memory Limit: 65536K |
Total Submissions: 8310 |
|
Accepted: 4960 |
Description
To calculate the circumference of a circle seems to is an easy task-provided your know its diameter. But what if you don ' t?
You is given the Cartesian coordinates of three non-collinear points in the plane.
Your job is to calculate the circumference of the unique circle, the intersects all three points.
Input
The input would 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 th Ree points. The diameter of the circle determined by the three points would 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 TH Ree points. The circumference is to being printed accurately rounded to the 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
I began to prepare to use two to find... And then forget the definition of the circumferential circle, and then baidu, and found that there is a formula directly
Here is the formula for the radius of the circumferential circle
Circumscribed circle: Here is the formula derivation: ∴ by Helen Formula ∴ inscribed circle: ∵∴ by Helen Formula, ∴ solution
#include<stdio.h>
#include<iostream>
#include<string.h>
#include <stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
const double pi = 3.141592653589793;
const double esp = 1e-8;
struct Point{
double x,y;
}p[3];
double dis(Point a,Point b){
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
int main()
{
while(scanf("%lf%lf%lf%lf%lf%lf",&p[0].x,&p[0].y,&p[1].x,&p[1].y,&p[2].x,&p[2].y)!=EOF){
double a = sqrt(dis(p[0],p[1]));
double b = sqrt(dis(p[1],p[2]));
double c = sqrt(dis(p[0],p[2]));
double r = a*b*c/sqrt((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c));
printf("%.2lf\n",2*pi*r);
}
return 0;
}
POJ 2242 (known three points for circumscribed circle perimeter)