2013-03-18 5 views
1

두 개의 객체 목록이 있습니다. 주어진리스트 2 오브젝트에 대해 현재리스트 1 오브젝트의 경계 내에있는 경우에만 조작을 수행하려고합니다. 이 같은거리 비교에서 중첩 된 for 루프를 피하십시오.

뭔가 :

이 뭐가 잘못
for k=1:size(object_list1) 
    for l=1:size(object_list2) 
     if euclideanDstSqt(object_list1(k).centroid,object_list2(l).centroid) < toleranceRadius then 
      // do something ... 
     end 
    end   
end 

, 심지어 아주 멀리 서로있는 개체를 들어, 거리마다 시간을 확인하는 것입니다. 알고리즘 적으로 더 똑똑한 방법이 있습니까? 어쩌면 어떤 종류의 나무일까요?

이 알고리즘은 C++로 변환 될 수 있습니다. 따라서 모든 매트릭스 지향 Matlab 트릭을 잊어 버려야합니다.

답변

0

나는 항상 거리를 계산해야한다고 말할 것입니다. 유일한 해결책은 포인트를 공간적으로 정렬하거나 일종의 사전 계산을하는 것입니다. 예를 들어 공간 격자를 만들고 임의의 점과 동일한 사분면에 속한 모든 점을 버립니다.

1

목록 2의 개체를 k-d tree에 넣은 다음 목록 1의 개체의 경우 다음 이웃까지의 거리가 경계 밖에있을 때까지 가장 가까운 이웃을 계속 찾으십시오.

+0

k-d 트리는 매우 흥미로운 알고리즘입니다. 비커에게 감사드립니다. 나는 또한 제곱근을 취하는 대신에 2 차 유클리드 거리를 사용할 것이다. – CTZStef

+0

잘 작동합니다. – beaker

관련 문제