Antwort von Grund auf aktualisiert und neu geschrieben.
Sie sind ein Polytop gegeben . Führen Sie die Dobkin-Kirkpatric-Hierarchie auf P aus. Dies gibt Ihnen eine Folge von Polytops P 1 ⊆ PP . Angenommen, Sie möchten den Punkt auf P finden , der einem Abfragepunkt q am nächsten liegt. Der grundlegende Algorithmus beginnt mit der Berechnung des nächstgelegenen Punkts c 1 zu q auf P 1 , dann werden alle neuen Bereiche (Zelte) neben c 1 berücksichtigtund der nächstgelegene Punkt c 2 zu q gefundenP1⊆P2⊆…⊆Pk=PPqc1qP1c1c2qin diesen neuen Regionen, und fahren Sie auf diese Weise fort, bis wir .Pk
Befindet sich an einer Kante, ist dies kein Problem - möglicherweise berühren nur zwei Zelte diese Kante oder nur eines von ihnen bedeckt die Kante. In diesem Fall dauert das Aktualisieren von c i + 1 von C i eine konstante Zeit.cici+1Ci
Das Problem ist also, wenn auf einem Scheitelpunkt hohen Grades liegt, weil dann die Anzahl neuer Zelte daneben, wenn nach P i übergegangen wirdci groß sein könnte. Um dies zu überwinden, simulieren wir einen Scheitelpunkt mit hohem Grad als eine Sammlung von Scheitelpunkten mit niedrigem Grad. Insbesondere werdenwir unsin jeder Phase, wenn c i auf einem Scheitelpunktv liegt, zwei aufeinanderfolgende Kanten e i , e ' i erinnern, dievbenachbart sind, so dass der nächste Punkt zuqin P i + 1 istPi+1civei,e′ivqPi+1liegt auf einem Zelt, das entweder angrenzend ist oder eine dieser beiden Kanten bedeckt. Daher können wir die erforderliche Berechnung in konstanter Zeit durchführen.
Wir bleiben also bei dem Problem, wie wir diese beiden Kanten beim Aufstieg im Auge behalten können.
Berechnen Sie dazu für jeden Eckpunkt von P eine Tangentenrichtung t v . Lassen Q i ( v ) das konvexe Vieleck sein , dass der Scheitelpunkt der Figur ist V für das Polygon P i (mit der Ebene definieren , die Scheitel Figur hat in der Richtung der normalen t v ). Konzeptionell, Q 1 ( v ) , Q 2 ( v ) , . . . , Q k ( v )vPtvQi(v)vPitvQ1(v),Q2(v),...,Qk(v)Verhält sich wie eine 2D-DK-Hierarchie. Liegt der nächste Punkt auf zu q auf einem Scheitelpunkt w, so entspricht dies v und einer benachbarten Kante e in P i , wobei die Kante e die Ebene der Scheitelpunktfigur bei w schneidet . Wenn der nächste Punkt von Q i ( v ) zu q auf einer Kante e 'liegt , erinnern Sie sich an die beiden benachbarten Kanten von P i , die die beiden Ecken von e ' definieren (hier)Qi(v)qwvePiewQi(v)qe′Pie′ gehört zu Q i ( v ) ).e′Qi(v)
Und jetzt sind wir fertig ... Wenn auch auf Q i + 1 ( v ) ist, können wir es in konstanter Zeit aktualisieren (da dies nur eine 2d DK-Hierarchie ist). Wenn andererseits c i + 1 nicht mehr auf Q i + 1 ( v ) liegt , muss es zu einem neuen Zelt gehören, das benachbart ist oder den vorherigen Punkt c i abdeckt . In beiden Fällen können wir es in konstanter Zeit aktualisieren.ci+1Qi+1(v)ci+1Qi+1(v)ci