【发布时间】:2011-07-13 19:44:53
【问题描述】:
作为对my thread 的扩展和部分回答,我编写了一个简单的算法,给定一组点(具有 xy 坐标)可以形成一个非自相交的多边形。
声明:给定一组具有不同坐标的任意点,总是可以构造一个规则或不规则、非自相交的多边形。
算法:
假设有一个包含所有顶点的集合 V
1) 按x坐标对V中的所有顶点进行排序
2) 想象一条平行于 x 轴的直线(我们称其为“分隔线”),从第一个节点开始扩展到无穷大并将顶点分割/分割成两组。
3) 现在考虑两个集合:
A = 分割线上所有顶点的集合
B = 所有剩余顶点的集合
4) 从 A 的最左边的顶点开始连接 A 中的所有顶点,直到到达最右边
5) 如果排序集 V 的最右边的顶点(x 坐标最大的顶点)不在 A 中,则连接最后一个顶点(A 的最右边)。
6) 向后工作,从排序集V的最右边的顶点(x坐标最大的顶点)开始连接B中的所有顶点
7)连接B的第一个(B的最左边的顶点)顶点和A的最左边的顶点
我认为该算法是正确的,找不到会失败的测试,但也许我遗漏了一些东西。
如果您能看一下并给我一个如果有的话(我相信一定有)不起作用的例子,我将不胜感激。
【问题讨论】:
标签: algorithm geometry polygon computational-geometry vertex