Haskell中的Bentley-Ottmann算法?

时间:2011-06-27 00:17:06

标签: algorithm haskell computational-geometry

1 个答案:

答案 0 :(得分:4)

如果线段仅在交叉点处更改,则排序,并且仅针对在给定点处相交的线段。这可以通过移除交叉段并再次插入来实现。

排序函数是y坐标,当y s相等时,是斜率。然后将以正确的顺序插入交叉段。随着扫描的进行,扫描线的线段交叉点的实际y坐标将发生变化。这并不重要,因为订单将保持不变(直到我们交换,即删除并再次插入,交叉段)。无论如何都不需要存储实际的y坐标。当我们插入或删除段时,应该动态计算扫描线的任何给定位置。

不应将有问题的数据结构称为Set,它是Map,或者更准确地说是有序地图。找到给定元素的邻居的操作在这里是必不可少的。