在Java中用于存储和搜索2d空间坐标的良好数据结构是什么

|| 我目前正在为游戏编写一个插件,其中一个功能包括设置由2个二维坐标定义的区域的能力(矩形的左上和右下区域)。这些区域随后将被存储,并将具有与每个区域相关联的各种其他数据。当玩家在世界各地移动时,我需要仅从玩家的坐标确定他何时进入这些区域之一,并且这样做的方法必须高效,因为每秒将被调用数百次。 是否有任何数据结构可以有效地支持这种搜索,如果可以,我在哪里可以找到有关它的文档,以找到要使用的Java实现,或者在需要时自己实现? 我还想指出的是,我发现了一些似乎仅支持批量加载的树结构,但是我必须能够实时从该结构中添加和删除值。     
已邀请:
        用于确定部分空间中的冲突的良好数据结构是四叉树数据结构。四叉树根据给定区域中元素的数量递归地划分空间。因此,如果坐标在对数时间范围内,它就可以进行搜索。 编辑:我在这里找到一个实现,但没有给出许可证信息。     
        在一维情况下,合适的数据结构是间隔树。 要解决二维转换,您可以使用间隔树快速找到包含至少一个维度中的点的矩形,并检查每个维度的第二个维度(可能已经足够快),或者使用Wikipedia文章简要概述了许多方面的概括(尽管我必须承认,我在初读时不理解该概括)。 假设玩家移动缓慢(即,进入或离开事件的区域数与区域的数目相比较小),则以下方法可能会更有效:保留x坐标在矩形开始或结束处的搜索树, y坐标的类似树。如果玩家进入或离开某个区域,则他必须已经越过边界点的x或y坐标。也就是说,您将在x搜索树上对范围[old_x,new_x]进行范围查询,并检查每个矩形。对y方向执行相同操作(不报告重复项)。     
        要实现坐标,您可以在实现所需功能的类中使用Point2D: http://download.oracle.com/javase/6/docs/api/java/awt/geom/Point2D.html     

要回复问题请先登录注册