算法&&计算几何
2011-11-08 23:22
351 查看
The Circumference of the Circle
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
Sample Output
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;
}
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 5427 | Accepted: 3521 |
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;
}
相关文章推荐
- [SGU124] Broken line && 计算几何
- 计算几何基础——矢量和叉积 && 叉积、线段相交判断、凸包(转载)
- [POJ1755] Triathlon && 计算几何, 线性规划
- 区域赛选拔题--Moon Game--计算几何&&判断平面点集组成的凸边行的个数
- UVa 10387 Billiard (计算几何&反射)
- [POJ1113] Wall && 计算几何
- ACM学习历程—BestCoder 2015百度之星资格赛1004 放盘子(策略 && 计算几何)
- Educational Codeforces Round 2 D.Area of Two Circles' Intersection(计算几何)
- hdoj Pipe&&南阳oj管道问题&&poj1039(计算几何问题...枚举)
- POJ1113(Wall) && Hdu1392(Surround the Trees) (计算几何--凸包)
- POJ 1127 —— 计算几何 && 线段相交
- UVA 3905 计算几何<扫描法> <求一条线与矩形的交>
- POJ 2653 && HDU 1147 Pick-up sticks(计算几何)
- uva579&nbsp;-&nbsp;ClockHands(计算几何)
- uva 1531 & poj 1518 Problem Bee(几何计算+贪心)
- 【计算几何&凸包】SCOI2007最大土地面积
- ACM学习历程—FZU 2140 Forever 0.5(计算几何 && 构造)
- Uva 数论&&计算几何 几个水题
- POJ 1118 && HDU 1432 Lining Up(计算几何)
- POJ 2318:TOYS & POJ 2398:Toy Storage 计算几何