Algorithm 在边/顶点列表中查找所有非重叠多边形

Algorithm 在边/顶点列表中查找所有非重叠多边形,algorithm,polygon,computational-geometry,edge-detection,vertex,Algorithm,Polygon,Computational Geometry,Edge Detection,Vertex,我有一个边列表和一个顶点列表。每个边引用两个顶点,每个顶点维护一个边列表 我想找到从这个图形生成的所有非重叠多边形 例如 0,0)(4,0)(4,2)(4,4)(2,4)(2,2)(4,2)(6,2)(6,6)(0,6)(0,0) 此路径应描述在某些垂直上发生碰撞的每个唯一边。在实际图形中,顶点是不同的。我需要从这个集合中得到的两个多边形是(0,0)(4,0)(4,2)(2,2)(2,4)(4,4)(4,4)(4,2)(6,2)(6,6)(0,6)和(2,2)(2,4)(4,4)(4,2)您所描

我有一个边列表和一个顶点列表。每个边引用两个顶点,每个顶点维护一个边列表

我想找到从这个图形生成的所有非重叠多边形

例如

0,0)(4,0)(4,2)(4,4)(2,4)(2,2)(4,2)(6,2)(6,6)(0,6)(0,0)


此路径应描述在某些垂直上发生碰撞的每个唯一边。在实际图形中,顶点是不同的。我需要从这个集合中得到的两个多边形是(0,0)(4,0)(4,2)(2,2)(2,4)(4,4)(4,4)(4,2)(6,2)(6,6)(0,6)和(2,2)(2,4)(4,4)(4,2)

您所描述的是在图中寻找所有最小回路的问题。(我认为,它碰巧有一个几何模型是不相关的。)有一篇关于寻找最小电路的论文。您可以通过删除最小回路的边并再次运行该算法来构建该模型


对于有向图的情形,也讨论了这个问题。您可以通过创建顶点反转的每条边的副本,然后将其视为有向图,将图形转换为有向图。唯一的问题是每个多边形将被发现两次,在每个遍历方向上一次。您可以通过后期处理步骤或在算法运行时通过一些巧妙的簿记来清理这些问题。

您所描述的是在图中查找所有最小回路的问题。(我认为,它碰巧有一个几何模型是不相关的。)有一篇关于寻找最小电路的论文。您可以通过删除最小回路的边并再次运行该算法来构建该模型


对于有向图的情形,也讨论了这个问题。您可以通过创建顶点反转的每条边的副本,然后将其视为有向图,将图形转换为有向图。唯一的问题是每个多边形将被发现两次,在每个遍历方向上一次。你可以通过后处理步骤或者在算法运行时通过一些巧妙的簿记来清理这些问题。

嗯,我在想

唯一特别感兴趣的顶点是具有两条以上边的顶点。查找具有两条以上边的所有顶点是O(n)。然后,找到TIGEST闭环与找到给定顶点处的给定边和另一条边之间的最小θ相同(如果顶点为逆时针方向,则这是从当前边顺时针方向的最小角度)。为了找到所有最紧的闭合环,我需要检查边计数大于2的顶点处的所有边ccw边对。这是跟踪的初始化。从该点开始,轨迹将始终顺时针拾取具有最小θ的下一条边。返回路径后,我将移动到根顶点中的下一个边对,然后再次移动路径。选中所有对后,我将移动到边计数大于2的下一个顶点。现在,如果我只能确定我是否落入了一个已知的循环,而不是跟踪。如果路径的前两个顶点在已知多边形中以相同的顺序出现


听起来怎么样?我知道这不是djikstra,但它会起作用,希望比寻找所有周期的蛮力更快。

嗯,我在想

唯一特别感兴趣的顶点是具有两条以上边的顶点。查找具有两条以上边的所有顶点是O(n)。然后,找到TIGEST闭环与找到给定顶点处的给定边和另一条边之间的最小θ相同(如果顶点为逆时针方向,则这是从当前边顺时针方向的最小角度)。为了找到所有最紧的闭合环,我需要检查边计数大于2的顶点处的所有边ccw边对。这是跟踪的初始化。从该点开始,轨迹将始终顺时针拾取具有最小θ的下一条边。返回路径后,我将移动到根顶点中的下一个边对,然后再次移动路径。选中所有对后,我将移动到边计数大于2的下一个顶点。现在,如果我只能确定我是否落入了一个已知的循环,而不是跟踪。如果路径的前两个顶点在已知多边形中以相同的顺序出现


听起来怎么样?我知道这不是djikstra,但它会起作用,并且希望比用蛮力查找所有循环更快。

从您的描述中,我假设边/顶点与空间中的点关联?是的,这是一个计算几何问题。此外,我认为深度优先搜索可能会起作用。当您说“非重叠多边形”时如果有描述两个重叠多边形的边,会发生什么情况?您是将其报告为一个由其交点组成的多边形,还是两个多边形都不报告?形成多边形的路径应选择最紧密的闭合环。这可以防止多边形重叠。根据您的描述,我假设边/顶点与空间中的点关联?是的,这是一个计算几何问题。此外,我认为深度优先搜索可能会起作用。当您说“非重叠多边形”时,如果有描述两个重叠多边形的边,会发生什么?您是将其报告为一个由其交点组成的多边形,还是两个多边形都不报告?形成多边形的路径应选择最紧密的闭合环。这可以防止多边形重叠。我认为位置确实很重要,因为你可以在空间中定位一个循环,这样每一条边都会以一种方式交叉另一条边,由此产生的多边形实际上不是由电路边构成的,但根据该回路中的边的相交位置,会产生更多的边。对于非平面图,这也可能有问题。我可能错了(也许我误读了你的答案),但出于这些原因,我认为这个解决方案不起作用。@Ted Hopp,我可能错了,但我认为这不是一个完全正确的算法。假设我