hdu 4195#计算几何
来源:互联网 发布:软件销售心得 编辑:程序博客网 时间:2024/04/28 13:58
题意:给你三个顶点,这三个点是一个正多边形上的顶点,问这个正多边形最少有多少个边?
思路:三个点,三角形–>外接圆–>必定也是该凸多边形的外接圆-
我们可以把三个点当做一个三角形放在它的外接圆上,然后求出每个角的度(即三角形分的三个弧度所对应的圆周角),设顶点数为n,我们只需计算,三角形任意两点所对应的圆心角是否是2PI/n的倍数就可以了,并且i很小,可以枚举。
#include <stdio.h>#include <math.h>//注意精度,1e-8直接WA了一次#define EPS 1e-6#define PI acos(-1.0)double dist[3],angle[3];double point[3][2];double cal_dist(int i,int j){ return sqrt((point[i][0] - point[j][0]) * (point[i][0] - point[j][0]) + (point[i][1] - point[j][1]) * (point[i][1] - point[j][1]));}///求圆周角double cal_angle(int i,int j,int k){ return acos((dist[i] * dist[i] + dist[j] * dist[j] - dist[k] * dist[k])/(2.0 * dist[i] * dist[j]));}///判断是否为整数,记得加0.05,注意 1 可能被表示成0.99999999999bool ok(double x){ return fabs(x - int(x + 0.05)) < EPS;}int main(){ int i; while(scanf("%lf%lf",&point[0][0],&point[0][1]) == 2) { scanf("%lf%lf%lf%lf",&point[1][0],&point[1][1],&point[2][0],&point[2][1]); dist[0] = cal_dist(0,1); dist[1] = cal_dist(1,2); dist[2] = cal_dist(0,2); angle[0] = cal_angle(0,1,2) / PI; angle[1] = cal_angle(1,2,0) / PI; angle[2] = cal_angle(2,0,1) / PI; for(i = 3; i <= 1000; ++i) if(ok(angle[0] * i) && ok(angle[1] * i) && ok(angle[2] * i)) break; printf("%d\n",i); } return 0;}
- hdu 4195#计算几何
- hdu 3952 计算几何
- HDU 3694计算几何
- hdu 4353 计算几何
- hdu 3681 计算几何
- hdu 3629 计算几何
- hdu 3629 计算几何
- hdu 5476 (计算几何)
- hdu 2826 计算几何
- hdu 1007(计算几何)
- hdu 1086 计算几何
- hdu 6158 计算几何
- HDU 3952(计算几何)
- HDU 4033 二分+计算几何
- hdu-2438 计算几何+三分
- HDU 1115 计算几何MB
- hdu 2876 (计算几何)
- hdu 3952 计算几何 暴力
- 《苹果Mac OS X 10.6 Snow Leopard雪豹操作系统8BT下载地址》
- 属性作用域(context,httpsession,request)
- 常见的几种RuntimeException
- Linux进程间通信之信号量
- 远程连接MYSQL提示1130错误
- hdu 4195#计算几何
- CSP开发基础--CSP开发流程
- spring mobile site preference管理
- Pragma 在代碼中的作用(轉)
- 搜索——Hdu_1016_Prime Ring Problem
- 2.服务端拦截器:这种发布方式,拦截器可以正常使用
- error while loading shared libraries的解決方法
- 缅怀一下我曾经的项目—OA Sys
- 将静态文本框的背景设置为透明