图形算法:Sutherland-Hodgman裁剪算法 - 当2个外顶点穿过裁剪区域时会发生什么?

时间:2015-05-09 20:10:44

标签: algorithm graphics

Sutherland-Hodgman算法中有4个规则用于剪切多边形:

  • 如果两个顶点都在裁剪区域内 - 保存第二个
  • 如果第一个顶点在里面,第二个顶点在外面 - 计算与剪裁区域边界的交点并保存它
  • 如果第一个顶点位于外侧而第二个顶点位于内侧 - 计算与剪切区域边界的交点并保存,并保存第二个顶点
  • 如果两个顶点都在外面 - 不保存任何内容

由于这个解释,当由2个顶点形成的线穿过裁剪区域时会怎样做,如下图所示?

如果我按照算法步骤进行操作,我最终根本就没有顶点......是不是没有考虑这种情况?也许我应该预先计算所有交叉区域并使用它们?

ClippingProblem http://oi59.tinypic.com/25722wz.jpg

1 个答案:

答案 0 :(得分:1)

我终于找到了答案 - 我将在这里与所有想要了解的人分享......

您可以在此处看到正确算法的说明:https://www.youtube.com/watch?v=Euuw72Ymu0M

许多教程中描述错误,应该将每个顶点视为裁剪区域内/外,然后应用问题中描述的规则上方。

正确的算法 - 迭代裁剪区域的所有边缘。 而不是考虑顶点内/外裁剪区域 - 正确的做法是将顶点视为我们迭代的特定边的内/外侧的 。这意味着,例如,对于问题中的示例图像 - 剪切区域的左边缘将蓝色矩形的右上角视为内部 - 因为尽管它位于剪切区域之外,它位于左边缘的内侧。例如,左上角将被此边缘视为外部

如果算法是在2D中完成的,我们有裁剪区域的4条边。例如,我们首先在左边缘应用算法 - 然后我们使用其输出在右边缘运行算法,然后在上边缘和下边缘使用相同的算法。最后的答案将是最后一个的输出。

即。如果我们使用Left-> Right-> Up-> Bottom,则最终输出将是底边输出的顶点列表。

你可以尝试运行这个算法,按照每个边缘的 问题中描述的规则 - 你会发现你的最终多边形将是剪裁的那个