下午好。
我的情况:
问题:
谢谢: - )。
答案 0 :(得分:18)
R-Tree是适用于此用例的最佳数据结构。 R-tree是用于空间访问方法的树数据结构,即用于索引多维信息(如地理坐标),矩形或多边形。所有矩形的信息都可以以树形式存储,因此搜索很容易
Wikipedia页面,short ppt和research paper将帮助您理解这一概念。
答案 1 :(得分:3)
在java中,您可以使用shape.contains
但一般来说,假设一个矩形由(x,y,width,height)定义,你可以
if(pt.x> = x&& pt.x< = x + width&& pt.y> = y&& pt.y< = y + height) ...
如果您在集合中拥有所有矩形,则可以遍历集合并找到包含该点的那些矩形
答案 2 :(得分:2)
如果(left, top, right, bottom)
和 (x, y)
,则矩形left < x < right
包含一个点top < y < bottom
(假设坐标向下增加,大多数情况就是如此)我见过的硬件;如果你的坐标向上增加,传统的数学案例就越多,交换top
和bottom
)。你不会比测试更有效率。
如果您将矩形视为“包含”某个点(如果它位于边框上),则将所有<
替换为<=
。
关于如何处理矩形的集合......我不知道。我认为根据角落的坐标排序的列表会有所作为,但我并没有真正看到它的好处...最多,你会削减你的东西列表,平均检查一半(最坏的情况仍然需要检查一切)。整个疯狂的一半仍然可以是一大堆。 :)
答案 3 :(得分:2)
看起来您的矩形集可能是动态的(“......用于添加矩形......”)。在这种情况下 - 2D Interval tree可能是解决方案。
答案 4 :(得分:1)
这是一个简单的解决方案。