Bentley-Ottmann算法中的重叠段

时间:2018-01-19 19:28:02

标签: computational-geometry

我正在尝试根据Mark de Berg, et al. Computational Geometry Algorithms and Applications Third Edition一书中的描述实现Bentley-Ottmann算法。关于支持重叠(共线的而非不相交的)段没有明确的陈述,但是另一个退化的案例正是精确描述的。

wikipedia我发现存在处理所有退化情况的实现,并在Bartuschka, U.; Mehlhorn, K.; Näher, S中进行了描述。但是很难理解。

提供here的方法完全相同。在第4.3小节中,我发现了以下内容:

  

线扫描算法的基本要素可以追溯到Bentley和Ottmann从1979年开始的工作。这里讨论的特殊公式,考虑了所有可能的退化,是由于Mehlhorn和Näher。

经过彻底调查后,我得出结论,唯一的区别是扫描线从左到右,但不是从de Berg的书中从上到下。但我无法理解为什么这个算法处理重叠段。我想看看为什么这些段被正确处理以及如何处理它们的一些证据。我们应该作为交叉输出什么:根本没有交叉点或者无限多个点交叉?

(我是alrady看了The Generalization of Bentley-Ottmann Algorithm。)

Plase帮助我找出此算法处理重叠段的方式和原因

1 个答案:

答案 0 :(得分:1)

重叠(我假设你的意思是,共线而非不相交)段并不难以处理。你有几个选择。

  • 您可以在事件中遇到重叠段时合并它们,并将它们视为一个段用于算法。
  • 您可以决定重叠的片段根本不相交,在这种情况下,除了在事件中过滤掉这些交叉点之外,您不必做任何事情。但是,为了简化事件处理的逻辑和在序列上定位段,有必要为段提出规范的顺序,这样如果两个段共线,则使用该顺序来确定哪一个&#39 ; s在顶部。