【发布时间】:2014-07-09 21:52:55
【问题描述】:
我有一个谷歌地图,一个服务器发送一个对象列表,这些对象的位置半径很小(最大 100 米)。我需要快速知道某个位置是否与列表中的某些内容发生冲突,并在地图上绘制所有内容。
我在想我应该使用四叉树(在游戏的 2D 碰撞中非常有用),但我的问题是我不仅限于屏幕,而是地球! 当然,如果我有 100 个对象,这不是问题,但服务器可以随时向我发送我需要添加到列表中的新对象,因此我的四叉树可能会发生巨大变化或变得不平衡。 我该怎么办 ?如果在当前边界之外添加新元素,我是否仍应使用四叉树并修改整个树?我应该将边界设置为最大纬度经度(但可能有双精度问题)?或者有人知道针对这类问题的更好的数据结构吗?
rXp
【问题讨论】:
-
只需将边界设置为最小/最大经度和纬度(-90.0 到 90.0,-180.0 到 180.0); QuadTrees 在这种情况下工作得很好,但也许 KD-Tree 或 Axis Aligned Bounding Box Tree 值得研究。
标签: google-maps data-structures 2d collision quadtree