[摘 要]本文给出了确定平面内n个点所在正多边形的一种方法,不管这n个点各自异边,还是若干点同边,只要它们构成一个凸包围,就可以用这种方法确定它们是否在某一个正多边形上,如果是,则能够给出该正多边形的顶点。
[关键词]正多边形;凸包围;自洽
1 引 言
利用本文的方法,可确定该题中所给八个数据点在地面上的投影点不在正
四、六边形上,并计算出了投影点所在的正八边形的顶点。另外,给出了一组五个数据点,用该法计算出了它们所在的正五边形的顶点。
2 相关概念
3 算法的详细步骤及计算过程
3.1 对输入n点进行顺时针排序
使得输入点按照顺时针方向存入结果数组R中。
3.2 计算穿过每个点的直线方向的取值范围
给定第1个节点的斜率,递推地,可得所有节点的斜率,相应得到各个直线与x轴所成角,形成AngleBiTree。
根据AngleBiTree每个节点对应的角、斜率范围Rk,可判断AngleBiTree中该节点对应的直线角是否合法,若合法,将IsOkBiTree的相应节点置为1,否则置0。
3.4 遍历IsOkBiTree,寻找一条节点值都是1的路径
3.5 在第一条直线方向角取值范围内采样,对每个采样,执行4,并判断各方向角是否自洽
若自洽,则4中路径对应的各方向角为正多边形各边的方向角,否则用下一个采样点执行4。若最终找不到自洽的直线序列,则需要更改边数M。
4 实验结果
5 结 论
实验和理论均表明,本文给出的算法能够找到给定的一些点所在的正多边形,但很显然,这样的多边形有时不唯一,若想找到这些点能够确定的所有多边形,可穷举边1的角度初值,找到所有自洽的多边形。而实际应用中,这种方式是不必要的。例如,可选择靠近多边形顶点的一些点作为给定点,此时能够找到符合实际要求的多边形。