Odpowiedz zaktualizowane i przepisane od nowa.
Dostaniesz Polytope . Uruchom Dobkin-Kirkpatric hierarchię na P. To daje sekwencję polytops P 1 ⊆ P 2 ⊆ ... ⊆ P k = P . Załóżmy, że chcesz znaleźć punkt P najbliższy punkt kwerendy q . Podstawowy algorytm zaczyna się od obliczenia najbliższego punktu c 1 do q na P 1 , a następnie uwzględnia wszystkie nowe regiony (namioty) przylegające do c 1 , znajduje najbliższy punkt c 2 do qPP1⊆P2⊆…⊆Pk=PPqc1qP1c1c2qw tych nowych regionów, a dalej w ten sposób, aż docieramy .Pk
Teraz, jeśli jest na krawędzi, nie ma problemu - tylko dwa namioty mogą dotykać tej krawędzi lub tylko jeden z nich może zakrywać krawędź. W związku z tym aktualizacja c i + 1 z C i w tym przypadku zajmuje stały czas.cici+1Ci
Problem pojawia się wtedy, gdy leży na wierzchołku wysokiego stopnia, ponieważ wtedy liczba nowych namiotów przylegających do niego przy przejściu do P i + 1 może być duża. Aby temu zaradzić, będziemy symulować wierzchołek dużego stopnia jako zbiór wierzchołków o niskim stopniu. W szczególności na każdym etapie, jeżeli c i leży na wierzchołku v , będziemy pamiętać dwie kolejne krawędzie e i , e ' i przylegające do v , tak że najbliższy punkt dociPi+1civei,e′iv w P i + 1qPi+1leży na namiocie, który jest przyległy lub zakrywa jedną z tych dwóch krawędzi. W związku z tym możemy wykonać wymagane obliczenia w stałym czasie.
Pozostaje nam więc problem śledzenia tych dwóch krawędzi podczas wspinania się.
W tym celu wcześniej obliczyć dla każdego wierzchołka o P kierunek stycznej t v . Niech Q i ( v ) będzie wypukłym wielokątem, który jest figurą wierzchołka v dla wielokąta P i (z płaszczyzną definiującą figurę wierzchołka ma normalną w kierunku t v ). Koncepcyjnie, P 1 ( V ) , P 2 ( V ) , . . . , Q k ( v )vPtvQi(v)vPitvQ1(v),Q2(v),...,Qk(v)zachowuje się jak hierarchia 2d DK. Jeśli najbliższy punkt na do q spoczywa na wierzchołku wag następnie odpowiada v a sąsiednią krawędzią e w P ı , gdzie krawędź e przecina płaszczyznę rysunku na wierzchołek wag . Jeśli najbliższy punkt na Q i ( v ) do q leży na krawędzi e ′ , pamiętasz, że dwie sąsiednie krawędzie P iQi(v)qwvePiewQi(v)qe′Pi , które określają dwa wierzchołki (tutaje′ należy do Q i ( v ) ).e′Qi(v)
A teraz skończymy ... Rzeczywiście, jeśli jest również na Q i + 1 ( v ), możemy go aktualizować w stałym czasie (ponieważ jest to tylko hierarchia 2d DK). Jeśli z drugiej strony c i + 1 nie jest już na Q i + 1 ( v ), to musi należeć do nowego namiotu, który sąsiaduje lub obejmuje poprzedni punkt c i . W obu przypadkach możemy go aktualizować w stałym czasie.ci+1Qi+1(v)ci+1Qi+1(v)ci