我正试图通过ShapeRenderer的line方法(Vector2 first,Vector2 second)找到一种方法来获得一堆连接点。所以我将解释然后显示图像和代码来帮助。
有一个Vector2类型的List,我需要找到下一个最近的顶点,然后排除第一个点。这是我的意思的图像。我在图像中标记了循环的迭代。
第一次迭代。)它找到最近的点。
第二次迭代。)它看到第一个点更接近但仍然选择第三个点。这是核心问题,我需要确保第二点找到第三点,即使第一点是较近点。
以下是我尝试过的代码。
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轴的点。我迫切需要帮助。谢谢!
答案 0 :(得分:1)
制作输入参数verts
的深层副本(即Array
中包含相同参考列表的新verts
。然后迭代,但删除每个点后,你选择它作为下一个&#34;最近的&#34;邻居。
我不熟悉Array
类,但删除元素时ArrayList
会有正确的行为。在每个点上,只有未访问的点将保留在列表中。
答案 1 :(得分:0)
因为您的问题是找到距离第二个顶点最近的顶点,这是您的第三个顶点,而不考虑第一个顶点。使第二个for循环从每次迭代中第一个for循环的位置开始(k = i)。这意味着第二个for循环不会将第一个顶点视为计算距离的点。