Sutherland-Hodgman算法中有4个规则用于剪切多边形:
由于这个解释,当由2个顶点形成的线穿过裁剪区域时会怎样做,如下图所示?
如果我按照算法步骤进行操作,我最终根本就没有顶点......是不是没有考虑这种情况?也许我应该预先计算所有交叉区域并使用它们?
答案 0 :(得分:1)
我终于找到了答案 - 我将在这里与所有想要了解的人分享......
您可以在此处看到正确算法的说明:https://www.youtube.com/watch?v=Euuw72Ymu0M
在许多教程中描述错误,应该将每个顶点视为裁剪区域内/外,然后应用问题中描述的规则上方。
正确的算法 - 迭代裁剪区域的所有边缘。 而不是考虑顶点内/外裁剪区域 - 正确的做法是将顶点视为我们迭代的特定边的内/外侧的 。这意味着,例如,对于问题中的示例图像 - 剪切区域的左边缘将蓝色矩形的右上角视为内部 - 因为尽管它位于剪切区域之外,它位于左边缘的内侧。例如,左上角将被此边缘视为外部。
如果算法是在2D中完成的,我们有裁剪区域的4条边。例如,我们首先在左边缘应用算法 - 然后我们使用其输出在右边缘运行算法,然后在上边缘和下边缘使用相同的算法。最后的答案将是最后一个的输出。
即。如果我们使用Left-> Right-> Up-> Bottom,则最终输出将是底边输出的顶点列表。
你可以尝试运行这个算法,按照每个边缘的 问题中描述的规则 - 你会发现你的最终多边形将是剪裁的那个