【问题标题】:For a database of line segments, find all segments that intersect a rectangle对于线段数据库,查找与矩形相交的所有线段
【发布时间】:2013-06-12 13:29:54
【问题描述】:

给定大量线段,如何有效地找到与矩形相交的所有线段?一个典型的应用程序是 GIS 数据库,用于查找当前视野范围内的所有道路。对于点,这可以通过将点存储在 KD 树中来有效地完成,但是线段的相应数据结构是什么?

如果算法考虑到线宽,这是一个好处,但零宽度算法完全可以。

【问题讨论】:

    标签: data-structures geometry computational-geometry kdtree


    【解决方案1】:

    另一个可能的数据结构是R-treepriority R-tree 尤其会为您提供有保证的运行时间上限,但启发式变体在实践中可能更快。

    【讨论】:

      【解决方案2】:

      将矩形视为一组 4 条线段。 你现在有一组 n+4 线段。 对线段应用扫描线算法。 仅当两条线段来自不同的集合时才执行相交。即一个段是frm矩形,另一个来自数据库。 此外,您可以从矩形的第一个顶点开始扫描线处理,并在处理完所有矩形线后结束。

      您还可以搜索空间散列和线光栅化(用于用线数据填充空间单元) .这可能会更快。

      【讨论】:

        【解决方案3】:

        您可以使用段树,例如 CGAL 中存在的内容: dD Range and Segment Trees。该数据结构可用于所有维度,包括维度 2。

        【讨论】:

          猜你喜欢
          • 2020-12-17
          • 1970-01-01
          • 1970-01-01
          • 2012-05-26
          • 2011-11-14
          • 2017-11-25
          • 2011-04-14
          • 1970-01-01
          • 2016-12-22
          相关资源
          最近更新 更多