查找包含Point的Rectangle

时间:2013-11-16 22:21:28

标签: java java-2d

在Java SE 7中,我正在尝试解决我有一系列矩形的问题。通过一些用户交互,我得到一个点。我需要做的是找到包含Point的(第一个)Rectangle(如果有的话)。

目前,我正在通过非常简单的解决方案来实现这一点,只需将矩形存储在ArrayList中,并通过遍历列表并使用contains()来搜索包含的Rectangle。问题在于,因为这需要对用户来说是交互式的,所以即使是相对较少数量的矩形(例如200),这种技术也开始变得太慢。

我当前的代码看起来像这样:

// Given rects is an ArrayList<Rectangle>, and p is a Point:

for(Rectangle r : rects)
{
    if(r.contains(p))
    {
        return r;
    }
}

return null;

是否有更聪明的方法来解决这个问题(即,在O(log n)而不是O(n)中,和/或通过尽早消除明显不良候选者而对contains()的调用较少?)< / p>

1 个答案:

答案 0 :(得分:3)

是的,有。构建2 interval trees,它将告诉您x1到x2之间以及y1和y2之间是否存在矩形。然后,当您拥有该点的坐标时,在两个树中执行O(log n)搜索。

那将告诉你是否有可能的兴趣点周围的矩形。你仍然需要检查这两棵树是否有一个共同的矩形。

相关问题