【问题标题】:A decomposition of the polygon with self intersections具有自相交的多边形分解
【发布时间】:2018-12-21 12:18:20
【问题描述】:

如何将自相交的多边形分解为一组简单多边形?

输入多边形 P = {p1, ... pn} 由具有 CCW 方向的 n 个顶点的集合给出。我想对一组 m 个多边形 P1、...、Pm 进行分解。

简单地沿着路段从十字路口走到下一个路口不会带来任何效果;有 2 个线段具有相同的起点,由交点表示。

或许,某些词典排序的边缘可能会有所帮助...

【问题讨论】:

  • 问题:P1 的 NE 拐点是否缺少一个节点,或者某些段是否比 (x1,y1) -> (x2, y2) 更复杂
  • 问题没有很好的定义。假设您有一个看起来像this 的轮廓。你想从中得到多少个多边形?
  • 我猜是 3
  • @theMage 好的,那么 trefoil shape 呢?应该生成多少个多边形?您如何使答案与上一个相协调?什么规则决定答案中包含或排除哪个轮廓?
  • 嘿,n.m.,我真的没有你的问题的答案——也许@justik 有。从陈述原始问题的方式来看,我假设它仅限于 2D 空间,并且三叶形的 2D 表示将有 4 个“多边形”,但同样,这可能会做出一些不正确的假设

标签: algorithm polygon decomposition non-convex


【解决方案1】:

计算所有交点,创建新节点并在交点处划分边,为每个节点创建相邻边列表。

从某个点开始。从当前顶点(相对于最后一条边)使用最逆时针边走。将遍历的边添加到多边形并删除它们(或标记)。当你回到同一个顶点时,关闭多边形。

从仍然有边的第一个顶点开始重复。

【讨论】:

  • @MBo:我不确定这个策略是否会导致简单的多边形。如果我们到达某个路口,有两条路可以走。但是,其中只有 1 个(可能是较短的那个)带来了简单的多边形。
  • No9t 更短,但“关闭更快”。当我们从 P1 的顶点开始时,我们向左走,然后向下 - 进入带有一些边的节点。我们选择边缘向上 - 相对于旧方向最“左”,然后向左进入初始点。
  • 我认为这缺少一个步骤:“检查边缘是否与任何其他边缘相交,如果是,则在它们相交的点添加另一个顶点”(注意这些点如何尚未出现在上图)这也可以作为所有边的预处理步骤一次完成。
  • @tobias_k 啊哈,我看了第二张图片,所有路口都准备好了。
  • @tobias_k 最“左”的一个(逆时针顺序的最后一个)
猜你喜欢
  • 2016-11-18
  • 2013-10-16
  • 2017-04-20
  • 2015-10-22
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
相关资源
最近更新 更多