从ArrayList中找到最接近的3个点

时间:2014-07-19 17:38:51

标签: java arraylist coordinates

我有ArrayList<Vector2> map,其中包含各种二维坐标。通常少于10个。

给定Vector2个对象作为参数,找到Vector2中最接近ArrayList的三个并将它们推入Vector2[] closest的最佳方法是什么? Vector2 []元素的顺序无关紧要。

PS:上面提到的Vector2类是AndEngine Box2D扩展中使用的类。如果不熟悉它,可以将其视为一对float。方便的是它有someCoordinate.dst(someOtherCoordinate)来解决它们之间的问题。

1 个答案:

答案 0 :(得分:4)

如果您已经拥有dst()函数来获取两个Vector2个对象之间的距离,那么为什么不能只执行for循环来获取与其中每个其他对象的距离ArrayList的?

您可以创建更复杂的结构:将Vector2对象除以虚构网格中的位置,因此您首先可以找到壁橱区域并仅检查该区域中的那些Vector2对象。但是真诚地说,如果你只管理10个对象,那就不值得付出努力了。你不会赢得任何表现,无论如何你都必须创建for循环。

循环示例(在评论中要求):

我认为我们已经有Vector2 myVeckyArrayList<Vector2> map。 我可能会犯一些错误,因为我没有编译这个。但它应该足够好了。

Vector2 closestVecky = null;
float shortestDistance = -1;
for (Vector2 vecky : map){
    float veckyDist = vecky.dst();
    if (closestVecky==null || veckyDist < shortestDistance){
        shortestDistance = veckyDist;
        closestVecky = vecky;
    }
}
//when you reach here, you will have your `closestVecky` and `shortestDistance`