假设我有一组全部连接的2d线段。我需要一个算法来查找集合中最外面的段。也就是说,限制相同区域的最小子集。
注意:这与找到构成分段的点的凸包不同。
编辑: 在顶部是最初的一组段。 下面是删除内部细分的相同轮廓。 (忽略小灰色十字架,它们只是标记交叉点。)
答案 0 :(得分:4)
用铅笔怎么做??
答案 1 :(得分:1)
以下是从convex hull开始然后向内工作的方法。直觉是你从船体上的边缘开始,然后通过沿着边缘集中的最短路径找到“沿着”间隙的最近点来填充间隙。
答案 2 :(得分:1)
给定一个三角形非凸多边形,您可以指定顶点遍历的方向(CCW的顺时针方向)。使所有三角形的顶点类似于WRT遍历。将所有三角形分解为有向边。每个三角形的每个边都是两个顶点(a, b)
的元组。对于每个相邻的三角形,您有两个相反的边(a, b)
和(b, a)
。您可以简单地从进一步的考虑中排除这样的边缘对。最后,您将获得一组专门的外边缘。
如果您的多边形由非单纯部分组成(但仍可以指定顶点遍历的方向),则不会失去一般性。
源片段构造多边形的三角剖分是明显的步骤:将顶点拉伸到$ d + 1 $抛物面和三角剖分,然后排除三角形,其中至少包含一个不匹配任何源片段的边缘。
另一种可能的方法是略微修改Gift wrapping algorithm。