【问题标题】:Get from java hashmap based on 2d distance基于二维距离从java hashmap获取
【发布时间】:2011-10-18 18:46:13
【问题描述】:

我正在用许多单位在 android 中制作一个策略游戏,我已经到了需要检查每个对象的位置与其他对象的位置,以查看两者是否足够接近以至于它们应该开始斗争。现在,我可以确定两个单位是否足够接近的唯一方法是使用这种方法:

public boolean inProximity(float x2, float y2) {
        return Math.sqrt((x2 - x) * (x2 - x) + (y2 - y) * (y2 - y)) <= proximityRadius;
    }

我不想遍历所有单位 n 平方的次数。我正在查看一个 TreeMap 来存储位置,但是我将如何(如果可能的话)根据与单位的距离获取键?

【问题讨论】:

  • Hashmap 不起作用。 TreeMap 不起作用。

标签: java android search map


【解决方案1】:

您可能需要重新考虑此处的数据结构并查看四叉树。它们本质上允许您划分 2D 空间并进行碰撞检测,这似乎是您的用例。

http://en.wikipedia.org/wiki/Quadtree

只是在 java 四叉树上做一个 google 会在实现上产生一些命中。我没有使用过它们中的任何一个,所以我不能真正为它们提供担保,但这应该会给你一些东西。

【讨论】:

  • 谢谢,我会调查的。
【解决方案2】:

1) 首先要考虑的是,您不需要取平方根。平方和平方根都随着数字的增加而增加,因此这是一种优化。

2) 这被称为“最近对”问题,有基于分而治之的算法来解决它。

看看:http://en.wikipedia.org/wiki/Closest_pair_of_points_problem

【讨论】:

  • 这不是我遇到的问题,我不需要最近的点,但所有点之间的距离都接近 x 。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
相关资源
最近更新 更多