Resposta atualizada e reescrita do zero.
Você recebe um politopo . Executar a hierarquia Dobkin-Kirkpatric em P. Isto dá-lhe uma sequência de polytops P 1 ⊆ P 2 ⊆ ... ⊆ P k = P . Vamos supor que você gostaria de encontrar o ponto mais próximo em P de um ponto de consulta q . O algoritmo básico começa calculando o ponto mais próximo c 1 a q em P 1 , depois considera todas as novas regiões (tendas) adjacentes a c 1 , encontre o ponto mais próximo c 2 a qPP1⊆P2⊆…⊆Pk=PPqc1qP1c1c2qnessas novas regiões e continue dessa maneira até chegarmos a .Pk
Agora, se aparece sobre uma borda, então não há nenhum problema - apenas duas tendas pode tocar neste borda, ou apenas um deles pode cobrir a borda. Como tal, a actualização c i + 1 a partir de C i , neste caso, leva tempo constante.cici+1Ci
Assim, o problema é quando encontra-se em um vértice de grau elevado, porque então o número de novas tendas adjacentes para que quando em movimento para P i + 1 pode ser grande. Para superar isso, vamos simular um vértice de alto grau como uma coleção de vértices de baixo grau. Em particular, em cada estágio, se c i se encontrar em um vértice v , lembraremos de duas arestas consecutivas e i , e ′ i adjacentes a v , de modo que o ponto mais próximo de q em P i + 1ciPi+1civei,e′ivqPi+1fica em uma barraca adjacente ou que cobre uma dessas duas arestas. Como tal, podemos fazer o cálculo necessário em tempo constante.
Portanto, continuamos com o problema de como acompanhar essas duas arestas à medida que subimos.
Para fazer isso, pré-calcule para cada vértice de P uma direção tangente t v . Seja Q i ( v ) o polígono convexo que é a figura de vértice de v para o polígono P i (com o plano que define que a figura de vértice tem normal na direção de t v ). Conceptualmente, Q 1 ( v ) , Q 2 ( v ) , . . . , Q k ( v )vPtvQi(v)vPitvQ1(v),Q2(v),...,Qk(v)se comporta como uma hierarquia 2D DK. Se o ponto mais próximo de a q estiver em um vértice w , isso corresponderá a ve uma aresta adjacente e em P i , onde a aresta e cruza o plano da figura do vértice em w . Se o ponto mais próximo do Q i ( v ) para q encontra-se em uma vantagem e ' , então você lembrar as duas bordas adjacentes de P i que definem os dois vértices de e ' (aquiQi(v)qwvePiewQi(v)qe′Pie′ pertence a Q i ( v ) ).e′Qi(v)
E agora estamos a fazer ... Na verdade, se é também sobre Q i + 1 ( v ) , então podemos atualizado em tempo constante (uma vez que esta é apenas uma hierarquia DK 2d). Se, por outro lado, c i + 1 não estiver mais em Q i + 1 ( v ) , ele deverá pertencer a uma nova barraca adjacente ou que cubra o ponto anterior c i . Em ambos os casos, podemos atualizá-lo em tempo constante.ci+1Qi+1(v)ci+1Qi+1(v)ci