多边形边界算法?

时间:2010-12-19 04:41:16

标签: algorithm geometry shapes border

我有一组(x,y)值的数组,用于定义多边形。根据点的位置*铅笔大小绘制多边形。问题是我想绘制这种形状的边框,忽略内部顶点。看到这个例子,BLACK顶点是我感兴趣的,我想摆脱黄色顶点。

alt text

我想把X放在另一个数组中,顺时针方向排序。一直在考虑评估每个点,看看是否有一个邻居和哪里(北,南,东,西),但似乎太过苛刻检查每个顶点,我相信必须是另一个经过验证和更优雅的算法。

任何提示?

3 个答案:

答案 0 :(得分:1)

通常,多边形由轮廓定义。这是你必须处理的一种不幸的格式。

如果它们像那样布局(在具有相同y坐标的行中),那么你可以先对数组进行排序,首先是x,然后是y,然后取第一个点,两个点围绕y的任何变化,以及形成你的大纲的最后一点。

如果事情的真实状况有点混乱,那么你可能想要研究'alpha形状'。一些链接:http://biogeometry.duke.edu/software/alphashapes/http://cgm.cs.mcgill.ca/~godfried/teaching/projects97/belair/alpha.html

答案 1 :(得分:1)

由于你的“点”只是小方块,听起来像你的内点(那些对形状边界没有贡献的点)就是那些(x-1,y)(x+1,y),{ {1}},(x,y-1)也是所有积分。

您可以通过将所有点放在哈希表(或许多其他索引结构中的一个)中来快速完成该测试。

顺时针排序只需要走边界。如果有空洞,你必须决定你想做什么。

答案 2 :(得分:0)

制作精灵边框,在每个正方形上放置相同的位置,并在其后对oderlayout进行排序