查找由矩形集合包含的点

时间:2014-04-01 06:04:02

标签: algorithm data-structures geometry computational-geometry

输入:

  • 一组矩形(也是重叠的矩形)和一组点。
  • 坐标为integer类型。
  • 矩形的平行于轴的侧面

输出

任何矩形内的所有点


我应该使用什么是高效算法和数据结构?感谢。

3 个答案:

答案 0 :(得分:3)

您可以使用sweep line algorithm:按X坐标对点进行排序。当矩形进入或离开扫描线(左右边界的X坐标)时引入事件。当前与扫掠线相交的矩形是投影到扫掠线上时的一组间隔,因此可以使用interval treesegment tree(后者仅在Y坐标压缩后进行维护),但您可以这样做作为预处理步骤)。

使用该设置,您只需要检查每个点是否与数据结构维护的某个间隔相交。

运行时: O((n + m)log(n + m))

答案 1 :(得分:2)

2d segment tree (example here)是有效的数据结构,用于检查点是否在任何矩形内

答案 2 :(得分:0)

我能想出的最好的想法是检查每个点(x,y)是否包含在任何矩形(l,t,w,h)中,产生O(nm)的运行时限制{{1} }是点的数量,n是矩形的数量。