首页 > ACM题库 > HDU-杭电 > HDU 1374 The Circumference of the Circle[解题报告] C++
2013
12-09

HDU 1374 The Circumference of the Circle[解题报告] C++

The Circumference of the Circle

问题描述 :

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.

输入:

The input file 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.

输出:

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.

样例输入:

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

…………………………………………………………………………………………………………………………………………………….

求圆心公式:

             x0 = ((y3-y1)*(y2*y2-y1*y1+x2*x2-x1*x1)+(y2-y1)*(y1 *y1-y3*y3+x1*x1-x3*x3))/(2*(x2 -x1)*(y3-y1)-2*(x3-x1)*(y2-y1));
             y0= ((x3-x1)*(x2*x2-x1*x1 +y2*y2-y1*y1)+(x2-x1)*(x1*x1- x3*x3+y1*y1-y3*y3))/(2*(y2-y1)*(x3 -x1)-2*y -y1)*(x2-x1));
........................................................................................................................................................................................................................................................

#include<stdio.h>
#include <iostream>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<list>
#include<vector>
#pragma comment(linker,"/STACK:102400000,102400000")
using namespace std;
#define PI 3.141592653589793

int main()
{
   double x1,x2,x3,y1,y2,y3,r;
   double x0,y0;
   while(scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3)!=EOF)
   {
     x0 = ((y3 - y1)*(y2*y2-y1 * y1+x2*x2-x1*x1)+(y2-y1)*(y1 *y1-y3*y3+x1*x1-x3*x3))/(2*(x2 -x1)*(y3-y1)-2*(x3-x1)*(y2-y1));
     y0= ((x3-x1)*(x2*x2-x1*x1 +y2*y2-y1*y1)+(x2-x1)*(x1*x1- x3*x3+y1*y1-y3*y3))/(2*(y2-y1)*(x3 -x1)-2*y -y1)*(x2-x1));
     r=sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0));
     printf("%.2lf\n",2*r*PI);

   }
   return 0;
}

解题报告转自:http://blog.csdn.net/infinitezhen/article/details/9116123


  1. 您没有考虑 树的根节点是负数的情况, 若树的根节点是个很大的负数,那么就要考虑过不过另外一边子树了

  2. Good task for the group. Hold it up for every yeara??s winner. This is a excellent oppotunity for a lot more enhancement. Indeed, obtaining far better and much better is constantly the crucial. Just like my pal suggests on the truth about ab muscles, he just keeps obtaining much better.