HDU 4195
来源:互联网 发布:商务通弹窗js代码 编辑:程序博客网 时间:2024/06/16 10:04
一道计算几何,表示一开始一点思路都没有,看了别人的思路以后才下手写的,但是圆心角都不会求了,这就相当尴尬了。。。然后去普及了一下。。。
//思路:三个点,三角形–>外接圆–>必定也是该凸多边形的外接圆-//我们可以把三个点当做一个三角形放在它的外接圆上,然后求出每个角的度(即三角形分的三个弧度所对应的圆周角)//三角形的圆心角可以整除(2*pi)/n//,设顶点数为n,我们只需计算,三角形任意两点所对应的圆心角是否是2PI/n的倍数就可以了,并且i很小,可以枚举。#include<cstdio>#include<iostream>#include<cstring>#include<string>#include<cmath>#include<algorithm>#define EPS 1e-6#define PI acos(-1)using namespace std;const int maxn = 1024;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]));}//计算角度,这里用了余弦定理cos(s) = (a*a+b*b - c*c)/(2*a*b);利用圆周角定理,既然三角形上的三个点都在外接圆上,那么圆心角就是圆周角的两倍。bool 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(2,0); angle[0] = cal_angle(0,1,2)/PI; angle[1] = cal_angle(1,2,0)/PI; angle[2] = cal_angle(2,0,1)/PI; int i; for(i = 3;i <= 1000;i++) { if(ok(angle[0]*i)&&ok(angle[1]*i)&&ok(angle[2]*i)) break; } printf("%d\n",i); }}
0 0
- hdu 4195
- HDU 4195
- hdu 4195#计算几何
- HDU 4195 几何
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- IOS 发布 Itunes 上的操作流程
- 【整理】编程小常识
- Java类初始化顺序
- 从android应用程序跳转到系统的各个设置页面
- Device Tree Usage(理解DTS文件语法)
- HDU 4195
- Android listview加载本地图片
- 数组作为函数参数
- android library projects cannot be launched问题
- iOS将数字转成货币格式字符串
- 修理桌子-Java
- XtraBackup/innobackupex 远程备份MySQL
- didn't meet stated Content-length,wrote:'133' bytes instead of stated '204' bytes
- [BZOJ3156]防御准备(斜率优化dp)