我在android中制作了一个具有大量单位的策略游戏,我已经到了一个点,我需要检查每个对象的位置与其他每个对象的位置,看看两者是否足够接近它们应该开始战斗。现在,我可以确定两个单位是否足够接近的唯一方法是使用此方法:
public boolean inProximity(float x2, float y2) {
return Math.sqrt((x2 - x) * (x2 - x) + (y2 - y) * (y2 - y)) <= proximityRadius;
}
我不希望迭代所有单位n次方。我正在寻找一个TreeMap来存储位置,但那么我如何(如果它甚至可能)获得基于距单位距离的键?
答案 0 :(得分:2)
1)首先要考虑的是,你不需要采用平方根。正方形和平方根都随着数字的增加而增加,因此这将是一个优化。
2)这被称为“最近对”问题,并且有基于分而治之的算法来解决它。
看看:http://en.wikipedia.org/wiki/Closest_pair_of_points_problem
答案 1 :(得分:2)
您可能需要在此重新考虑数据结构并查看四叉树。它们基本上允许您对2D空间进行分区并进行碰撞检测,这似乎是您的用例。
http://en.wikipedia.org/wiki/Quadtree
在java quadtree上做谷歌会产生一些实施点击。我没有使用它们,所以我不能真正为它们担保,但这应该会让你继续下去。