2014-07-19 3 views
0

ArrayList<Vector2> map에는 다양한 2 차원 좌표가 있습니다. 일반적으로 10ArrayList에서 가장 가까운 3 점 찾기

보다 적은이 인수로 Vector2 객체 감안할 때 ArrayList에있는 3 개 개의 가장 가까운 Vector2의를 찾아 Vector2[] closest으로 그들을 밀어의 가장 좋은 방법은 무엇입니까? Vector2 []의 요소 순서는 중요하지 않습니다.

PS : 위에서 언급 한 Vector2 클래스는 AndEngine Box2D 확장에 사용되는 클래스입니다. 익숙하지 않은 경우 float 쌍으로 생각하십시오. 편리하게 그들 사이에 distence를 얻으려면 someCoordinate.dst(someOtherCoordinate) 있습니다. 이미 두 Vector2 물체 사이의 거리를 얻을 수있는 dst() 기능이있는 경우

답변

4

, 왜 그냥 ArrayList를 다른 모든 개체에 거리를 점점 for 루프를 할 수없는 이유는 무엇입니까?

훨씬 복잡한 구조를 만들 수 있습니다. 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` 
+0

거리를 얻기 위해 각 요소를 루핑하는 방법을 사용했지만 일시적으로 가장 먼 거리를 저장하는 방법을 생각했습니다. 개체 쌍이 내 머리를 긁적 거리게 만듭니다. 일부 코드 예제가 유용 할 것입니다. 오늘 두뇌가 안 돼서 미안해, 바보 같아. – Jarmund

+0

루프에 사용할 샘플 코드를 추가했습니다. 너 나 한테 맥주 한 빚지고있어. –

관련 문제