2016-07-10 20 views
0

ShapeRendererの線のメソッド(Vector2 first、Vector2 second)を介して接続するためのポイントを取得する方法を探しています。そこで私は、イメージとコードを助けて説明します。最後の点を除いて最も近い点を見つけるLibGDX Java

Vector2型のリストがあります。次の最も近い頂点を見つけて最初の点を除外する必要があります。ここに私が意味するイメージがあります。私はイメージのループの反復にラベルを付けました。

enter image description here

第一の繰り返し。)それは最も近い点を見つけます。

2回目の繰り返し)最初の点が近いと判断されますが、3番目の点が選択されています。これは中核的な問題です。私は、第1のポイントがより近いものであっても、第2のポイントが第3のポイントを見つけることを確認する必要があります。

これは私がこれをやろうとしたコードです。

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

あなたの問題は、最初のものを考慮せずに、2番目の頂点に最も近い頂点を見つけることです。これは、ケースの3番目の頂点です。 2番目のforループを各繰り返し(k = i)の最初のforループの位置から開始します。つまり、2番目のforループは、最初の頂点を距離として計算する点として考慮しません。

1

入力パラメータverts(つまり、に同じ参照リストを含む新しいArray)のディープコピーを作成します。その後、それを繰り返しますが、は、次の「最も近い」近隣として選択した後に、の各ポイントを削除します。

私はArrayクラスに精通していませんが、ArrayListは要素を削除すると正しい動作をします。各点において、未訪問の点のみがリストに残る。

関連する問題