假设我有一组全部连接的二维线段。我需要一种算法来找到集合中最外层的段。即,限定同一区域的最小子集。
注意:这与找到构成线段的点的凸包不同。
编辑:顶部是初始段集。下面是删除了内部段的相同轮廓。(忽略灰色的小十字,它们只是用来标记交叉点。)
假设我有一组全部连接的二维线段。我需要一种算法来找到集合中最外层的段。即,限定同一区域的最小子集。
注意:这与找到构成线段的点的凸包不同。
编辑:顶部是初始段集。下面是删除了内部段的相同轮廓。(忽略灰色的小十字,它们只是用来标记交叉点。)
你会用铅笔怎么做……?
给定一个三角非凸多边形,您可以指定顶点遍历的方向(逆时针顺时针方向)。使所有三角形都以类似的方向 WRT 遍历其顶点。将所有三角形分解为有向边。每个三角形的每条边都是两个顶点的元组(a, b)
。对于每个相邻的三角形,您有两个相反的边(a, b)
和(b, a)
。您可以简单地将这样的一对边排除在进一步考虑之外。最后,您将获得一组专门的外边缘。
如果您的多边形由非简单部分组成(但您仍然可以指定顶点遍历的方向),则不会失去一般性。
源段构造多边形的三角剖分是明显的步骤:将顶点拉伸到 $d + 1$ 抛物面和三角剖分,然后排除三角形,包含至少一条不匹配任何源段的边。
另一种可能的方法是稍微修改礼品包装算法。