데이터 구조는 변경할 필요가 없지만 검색 절차는 않습니다. 각 점을 [0, w] * [0, h]의 좌표 (x, y)로 나타내며, w는지도의 폭, h는 높이, *는 데카르트 곱을 나타냅니다. 이 포인트를 일반 KD 트리에 저장하십시오.
포인트 (x, y)와 직사각형 [a, b] * [c, d]가 주어지면 KD 트리를 검색하기위한 기본 기본 요소는 점에서 사각형까지의 거리 (제곱)를 결정합니다. 일반적으로이 g이
g(z, e, f) = e - z if z < e
0 if e <= z <= f
z - f if f < z
가 Z의 일차원 거리이다 (X, A, B) 2 + g (Y, C, D) 2이다 [즉, (F)]. 토 로이드 형 공간에서 랩 어라운드를 설명하기 위해 g를 약간 수정합니다.
g(z, e, f, v) = min(e - z, (z + v) - f) if z < e
0 if e < z < f
min(z - f, (e + v) - z) if f < z.
제곱 거리를 g (X, A, B, W) 2 + g (Y, C, D, H) 2이다. 나는 실행 시간이이 변형에 필적 할 것으로 기대한다.(재발행을 다시 시도 하겠지만 정규 KD 나무에 대한 최악의 경우는 대부분 n 시간 중 가장 가까운 이웃을 2D로 식별하는 O (n 1/2)보다 훨씬 나쁩니다.
출처
2011-11-15 22:55:29
Per
그리고 이것은 어떻게 포장을 도울까요? –