hdu 4195#计算几何

根据给定的三个顶点,该问题探讨如何确定它们构成的正多边形最少有多少条边。通过构建三角形并分析其外接圆,可以计算每个角度并检查它们是否为2PI/n的倍数,其中n为正多边形的边数。通过枚举较小的n值,可以找到满足条件的最小边数。
摘要由CSDN通过智能技术生成

题意:给你三个顶点,这三个点是一个正多边形上的顶点,问这个正多边形最少有多少个边?

思路:三个点,三角形–>外接圆–>必定也是该凸多边形的外接圆-
我们可以把三个点当做一个三角形放在它的外接圆上,然后求出每个角的度(即三角形分的三个弧度所对应的圆周角),设顶点数为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.99999999999
bool ok(double x)
{
    return fabs(x - int(x + 0.05)) < EPS;
}
int main()
{
    int i;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值