【问题标题】:Graphical Algorithms: Sutherland-Hodgman clipping algorithm - what happens when 2 outer vertices cross the clipping area?图形算法:Sutherland-Hodgman 裁剪算法 - 当 2 个外部顶点穿过裁剪区域时会发生什么?
【发布时间】:2015-07-20 14:10:29
【问题描述】:

Sutherland-Hodgman 算法中解释了 4 条规则用于裁剪多边形:

  • 如果两个顶点都在剪切区域内 - 保存第二个
  • 如果第一个顶点在内部,第二个在外部 - 计算与剪切区域边界的交点并保存
  • 如果第一个顶点在外面,第二个在里面 - 计算与剪切区域边界的交点并保存,同时保存第二个顶点
  • 如果两个顶点都在外面 - 什么都不保存

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

如果我遵循算法步骤,我最终会没有顶点......是否没有考虑这种情况?也许我应该预先计算所有的交叉区域并使用它们?

【问题讨论】:

  • 您能提供4条规则的参考吗?两个顶点是什么?我正在wikipedia 上阅读有关此算法的信息。它根本没有提到这两个顶点。
  • 在 Wikipedia 中,它实际上有不同的解释。如果您查看其他描述,甚至查看 Youtube 的视频指南,您会看到这 4 条规则。

标签: algorithm graphics


【解决方案1】:

我终于自己找到了答案——我会在这里分享给所有喜欢知道的人...

您可能会在此处看到正确算法的描述:https://www.youtube.com/watch?v=Euuw72Ymu0M

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

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

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

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

您可以尝试运行此算法,对于每条边都遵循问题中描述的规则 - 您会看到最终的多边形将完全是裁剪后的多边形

【讨论】:

    猜你喜欢
    • 2011-12-04
    • 2015-04-23
    • 2011-03-07
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    相关资源
    最近更新 更多