Algorithm 带简并的Greiner-Hormann裁剪

Algorithm 带简并的Greiner-Hormann裁剪,algorithm,polygon,computational-geometry,clipping,Algorithm,Polygon,Computational Geometry,Clipping,我试图理解E.L Foster和J.R.Overfelt[1]的论文《带退化的任意多边形的裁剪》,该论文声称通过处理退化来扩展经典的Greiner-Hormann多边形裁剪算法 然而,在他们描述的过程中,我遇到了一些困难。考虑图6(c)中描述的情况,假设多边形以相同的方式取向。从I5开始标记阶段(与I1相反,正如它们所做的那样):对于主体多边形S和剪裁多边形C,I5都有上一个和下一个标签(on,on)。因此,根据表1,首先移除交叉点标志(1),然后将当前节点和相邻节点标记为“in/in”(2)。

我试图理解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有(in/out),对C有(in/on)。表1显示“en/en”(或“ex/ex”,不清楚“prev”是否适用于列或行)。然后,表2显示,删除交叉点“en/en”和标签“in”(推测为“in/in”)[2]。但该示例说明了“ex/en”,而不是“in/in”

请问,有人能解释一下为什么会发生这种情况吗?如何到达“ex/en”?我从哪里开始标记阶段真的很重要吗

[1]

[2] 他们还说“入口/出口标志被设置为与前一个节点的入口/出口标志相等”,碰巧也是“in/in”,但表2与该规则的关系并不十分清楚。

这似乎是论文中的一个错误。基于表1的标签将首先给出ex/ex,然后基于表2生成out/out。我们进入->开启,甚至是退出->开启的情况比论文中的解释要复杂得多

如果交叉点在->开,则检查邻居,如果邻居不在->开,则将当前标记为邻居的对立面。因此,在I6的情况下,我们将其标记为ex/en。现在,如果我们有一个例子,其中邻居和电流都在->开,我们想检查序列中的下一个点,即I2和S2。如果序列中的两个点都处于启用状态,则删除该交点并将其标记为(in,in)。否则,如果下一个点为in,则标签应为en,如果下一个点为out,则标签应为ex

我们从外向上走的情况正好相反


我希望这能回答您的问题。

您能进一步了解整个算法吗。在福斯特的论文中,没有一个伪代码像Greiner的原始论文那样,有明确的操作步骤。到目前为止,我认为首先要遍历subc和clip中的所有顶点,纯粹是为了设置一个in/out/on标签(这是一个本身具有3个可能值的标志属性吗?)。之后,仅遍历subc,对于每个交叉口,在决定如何使用进入/退出标志时,测试prev和next的in/on/out属性。什么时候检查邻居@user22698您也能分享一下您的理解吗?