【发布时间】:2016-10-14 07:09:26
【问题描述】:
我正在尝试在 C++ 代码中实现基于本书的线段交叉点的平面扫描算法:http://www.cs.uu.nl/geobook/。他们建议使用平衡二叉搜索树来实现平面扫描的状态结构。
我正在使用 std::set 结构来实现状态结构,但是我在重新排序包含点“p”且它们的上端点是点“p”的段时遇到了问题。它们具有相同的坐标点,这意味着我不能将它们插入到 std::set 中,因为它不允许重复值......我试图用它们的下端点插入它们,但随后它们将失去顺序它们与“p”下方的一条扫掠线相交。
书中的伪代码如下:
- 将 U(p) ∪C(p) 中的段插入 Tao。 Tao中段的顺序应该对应于它们相交的顺序 p 正下方的扫描线。如果有一个水平段,它来了 在所有包含 p 的片段中排在最后。
- (∗ 删除并重新插入 C(p) 的段会颠倒它们的顺序。∗)
我不知道它们将如何颠倒它们的顺序。当我在状态结构中插入段时,我按它们的 x 上端点坐标对它们进行排序。我不知道如何在交叉路口后交换他们的订单。
有什么想法吗?
更新:这本书在这里:https://books.google.com/books?id=C8zaAWuOIOcC 但有一些页面没有出现。它在第 2 章,第 24、25 和 26 页。希望它有助于提供一些上下文
最好的,
【问题讨论】:
标签: c++ algorithm computational-geometry