查找离最后一点LibGDX Java不包括的最近点

时间:2016-07-10 06:52:38

标签: java libgdx

我正试图通过ShapeRenderer的line方法(Vector2 first,Vector2 second)找到一种方法来获得一堆连接点。所以我将解释然后显示图像和代码来帮助。

有一个Vector2类型的List,我需要找到下一个最近的顶点,然后排除第一个点。这是我的意思的图像。我在图像中标记了循环的迭代。

enter image description here

第一次迭代。)它找到最近的点。

第二次迭代。)它看到第一个点更接近但仍然选择第三个点。这是核心问题,我需要确保第二点找到第三点,即使第一点是较近点。

以下是我尝试过的代码。

private void cleanVertices(Array<Vector2> verts){

    newVerts = new Array<Vector2>();
    Vector2 tmpKey, tmpClose = null;


    tmpKey = verts.get(0);
    for(int i = 0; i < verts.size; i++){

        for(int k = 0; k < (verts.size - 1); k++){
            if(k == i)
                continue;
            //Distance formula
            double dist = MathFactory.distance(verts.get(i), verts.get(k));
            if(MathFactory.distance(verts.get(i), verts.get(k + 1)) < dist){

                tmpClose = verts.get(k + 1);
            }else
                tmpClose = verts.get(i);


        }
        tmpKey = tmpClose;
        newVerts.add(tmpClose);
    }

}'

这不能实现我所需要的,相反,它似乎连接最接近x轴的点。我迫切需要帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

制作输入参数verts的深层副本(即Array中包含相同参考列表的新verts。然后迭代,但删除每个点后,你选择它作为下一个&#34;最近的&#34;邻居。

我不熟悉Array类,但删除元素时ArrayList会有正确的行为。在每个点上,只有未访问的点将保留在列表中。

答案 1 :(得分:0)

因为您的问题是找到距离第二个顶点最近的顶点,这是您的第三个顶点,而不考虑第一个顶点。使第二个for循环从每次迭代中第一个for循环的位置开始(k = i)。这意味着第二个for循环不会将第一个顶点视为计算距离的点。