【问题标题】:Quadtree for collisions with latitude/longitude (earth size)与纬度/经度(地球大小)碰撞的四叉树
【发布时间】: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


【解决方案1】:

为避免双精度问题,尤其是在四元胞的分割边界处,建议在四叉树中使用整数坐标。

通过乘以 1E6 将双纬度/经度转换为 int,这会产生大约 10cm 的精度。

【讨论】:

    【解决方案2】:

    您可以使用空间填充曲线,例如 z 曲线。

    【讨论】:

      猜你喜欢
      • 2012-04-03
      • 1970-01-01
      • 2013-05-30
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      • 2015-03-25
      • 1970-01-01
      相关资源
      最近更新 更多