我试图理解论文"使用Degeneracies剪切任意多边形"作者:E. L Foster和J. R. Overfelt [1],声称通过处理退化来扩展经典的Greiner-Hormann多边形裁剪算法。
但是,我对他们描述的程序遇到了一些困难。考虑图6(c)所示的情况,并假设多边形以相同的方式定向。从I5开始标记阶段(与I1相反,就像它们一样):对于主题多边形S和剪切多边形C,I5具有上一个和下一个标签(on,on)。因此,根据表1,首先删除交叉标志(1),然后将当前节点和邻居节点标记为" in / in" (2)。这与示例一致。接下来,I6具有(输入/输出)S和(输入/输出)C表。表1" en / en" (或" ex / ex",不清楚" prev"是否适用于列或行)。然后,表2说,删除交集" en / en"和标签" in" (大概" in / in")[2]。但是这个例子说明" ex / en",而不是" in / in"。
拜托,有谁可以向我解释为什么会发生这种情况?如何到达" ex / en"?我开始贴标签阶段真的很重要吗?
[1] https://github.com/erichlf/PolyClipping/blob/master/Paper/PolyClip.pdf
[2]他们还说"进入/退出标志被设置为等于前一个节点的进入/退出标志"运气也恰好是" in / in"但目前尚不清楚表2如何与此规则相关。
答案 0 :(得分:1)
这似乎是本文的一个错误。基于表1的标签首先给出ex / ex,然后基于表2将产生out / out。我们进入或者甚至进入的情况比本文中的解释更复杂。
似乎工作的是,如果交叉点在检查邻居并且邻居是否在接通时,则将当前标记为与邻居相反。因此,在I6的情况下,我们将其标记为ex / en。现在,如果我们遇到邻居和电流都处于打开状态的情况,我们将要检查序列中的下一个点,即I2和S2。如果序列中的两个点都打开,则删除此交集并标记为(in,in)。否则,如果下一个点在,则标签应为en,如果下一个点已经出现,则为ex。
我们从out->开始的情况将是相反的。
我希望这能回答你的问题。