【发布时间】:2013-06-12 13:29:54
【问题描述】:
给定大量线段,如何有效地找到与矩形相交的所有线段?一个典型的应用程序是 GIS 数据库,用于查找当前视野范围内的所有道路。对于点,这可以通过将点存储在 KD 树中来有效地完成,但是线段的相应数据结构是什么?
如果算法考虑到线宽,这是一个好处,但零宽度算法完全可以。
【问题讨论】:
标签: data-structures geometry computational-geometry kdtree
给定大量线段,如何有效地找到与矩形相交的所有线段?一个典型的应用程序是 GIS 数据库,用于查找当前视野范围内的所有道路。对于点,这可以通过将点存储在 KD 树中来有效地完成,但是线段的相应数据结构是什么?
如果算法考虑到线宽,这是一个好处,但零宽度算法完全可以。
【问题讨论】:
标签: data-structures geometry computational-geometry kdtree
另一个可能的数据结构是R-tree。 priority R-tree 尤其会为您提供有保证的运行时间上限,但启发式变体在实践中可能更快。
【讨论】:
将矩形视为一组 4 条线段。 你现在有一组 n+4 线段。 对线段应用扫描线算法。 仅当两条线段来自不同的集合时才执行相交。即一个段是frm矩形,另一个来自数据库。 此外,您可以从矩形的第一个顶点开始扫描线处理,并在处理完所有矩形线后结束。
您还可以搜索空间散列和线光栅化(用于用线数据填充空间单元) .这可能会更快。
【讨论】:
您可以使用段树,例如 CGAL 中存在的内容: dD Range and Segment Trees。该数据结构可用于所有维度,包括维度 2。
【讨论】: