【问题标题】:Finding nearest point excluding last point LibGDX Java查找最近点,不包括最后一个点 LibGDX Java
【发布时间】:2016-07-10 15:34:06
【问题描述】:

我正在尝试找到一种方法来通过 ShapeRenderer 的线方法(首先是 Vector2,其次是 Vector2)来连接一堆点。所以我会解释然后显示图像和代码来帮助。

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

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

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

这是我尝试执行此操作的代码。

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 轴上最近的点。我迫切需要这方面的帮助。谢谢!

【问题讨论】:

    标签: java libgdx


    【解决方案1】:

    制作输入参数verts 的深层副本(即新的Array 包含verts 中的相同引用列表)。然后对其进行迭代,但在您选择它作为下一个“最近”邻居之后删除每个点。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-09
        相关资源
        最近更新 更多