poj 1329
来源:互联网 发布:淘宝视频开店教程 编辑:程序博客网 时间:2024/05/07 03:54
题目概述
给定三个不共线点的坐标,求一圆,使三个点都在圆上
时限
1000ms/3000ms
输入
每行六个浮点数,描述三个点的坐标,输入到EOF为止
限制
没有限制
输出
每组数据输出在两行中,第一行为圆的标准方程,第二行为圆的一般方程,具体参见样例,每组输出后带一空行
样例输入
7.0 -5.0 -1.0 1.0 0.0 -6.0
1.0 7.0 8.0 6.0 7.0 -2.0
样例输出
(x - 3.000)^2 + (y + 2.000)^2 = 5.000^2
x^2 + y^2 - 6.000x + 4.000y - 12.000 = 0(x - 3.921)^2 + (y - 2.447)^2 = 5.409^2
x^2 + y^2 - 7.842x - 4.895y - 7.895 = 0
讨论
计算几何,解析几何,利用三个点求出两条中垂线,其交点为圆心,到任意一个点距离为半径,求交点方法依然是定比分点,取得中垂线上点的方法有些类似于方向向量,都是固定方法
实现上,就是这个破输出格式需要注意,由于符号到数字之间有空格,因而需要分开输出,利用?:算符确定符号,对输出的数字则要取模,注意一般式不要算错,这可是高中的刚学的
感觉是又复习了一下计算几何最基础的那几个函数
题解状态
164K,0MS,C++,1704B
题解代码
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;#define INF 0x3f3f3f3f#define MAXN 0#define memset0(a) memset(a,0,sizeof(a))#define EPS 1e-8double dis(double x1, double y1, double x2, double y2)//两点间距离{ return sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2));}double xp(double x1, double y1, double x2, double y2, double x3, double y3)//向量积{ return (x1 - x2)*(y3 - y2) - (y1 - y2)*(x3 - x2);}void point_of_intersection(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, double &poix, double &poiy)//十个参数的交点公式 最后两个做返回值 这三个函数仍然是那么熟悉{ double Sabc = xp(x3, y3, x1, y1, x2, y2), Sabd = xp(x4, y4, x1, y1, x2, y2); poix = (Sabc*x4 - Sabd*x3) / (Sabc - Sabd); poiy = (Sabc*y4 - Sabd*y3) / (Sabc - Sabd);}void fun(double x1, double y1, double x2, double y2, double x3, double y3){ double mp1x = (x1 + x2) / 2, mp1y = (y1 + y2) / 2;//midpoint 中点 double p1x = mp1x + mp1y - y1, p1y = mp1y - mp1x + x1;//这个公式直接写不好理解 但是作图的话很容易有“显然成立”的感觉 double mp2x = (x3 + x2) / 2, mp2y = (y3 + y2) / 2; double p2x = mp2x + mp2y - y3, p2y = mp2y - mp2x + x3; double Ox, Oy, r;//圆心及半径 point_of_intersection(mp1x, mp1y, p1x, p1y, mp2x, mp2y, p2x, p2y, Ox, Oy); r = dis(Ox, Oy, x2, y2); printf("(x %c %.3lf)^2 + (y %c %.3lf)^2 = %.3lf^2\n", Ox >= 0 ? '-' : '+', abs(Ox), Oy >= 0 ? '-' : '+', abs(Oy), r);//output//注意标准式中两个符号原本就是减号 printf("x^2 + y^2 %c %.3lfx %c %.3lfy %c %.3lf = 0\n\n", Ox >= 0 ? '-' : '+', 2 * abs(Ox), Oy >= 0 ? '-' : '+', 2 * abs(Oy), r*r - Ox*Ox - Oy*Oy > 0 ? '-' : '+', abs(r*r - Ox*Ox - Oy*Oy));//output}int main(void){ //freopen("vs_cin.txt", "r", stdin); //freopen("vs_cout.txt", "w", stdout); double x1, y1, x2, y2, x3, y3;//由于y1在头文件中有重名函数 因而没法作为全局变量 while (~scanf("%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3))//input fun(x1, y1, x2, y2, x3, y3);}
EOF
0 0
- poj 1329
- poj 1329
- poj 1329
- POJ 1329 三角形外接圆
- poj 1329 计算几何
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- 用JSP+servlet实现文件的上传与下载
- java中自动拆箱与自动装箱学习总结
- 系统初始化-设置时间脚本
- Codeforces 492d 二分
- grep,find,which 命令用法
- poj 1329
- 51Nod-1043-幸运号码
- 172. Factorial Trailing Zeroes
- poj2752 KMP水题
- mapView的基本使用
- POJ 3233 Matrix Power Series (矩阵乘法+快速幂+等比二分求和) -
- python实战技巧1:安装MYSQL Connector
- 系统导航
- 有向路径检查