Відповідь оновлена та переписана з нуля.
Вам надається багатогранник . Запуск Добкін-Kirkpatric ієрархії на P. Це дає послідовність багатогранників P 1 ⊆ P 2 ⊆ ... ⊆ P до = P . Припустимо, ви хочете знайти найближчу точку на P до точки запиту q . Основний алгоритм починається з обчислення найближчої точки c 1 до q на P 1 , потім він розглядає всі нові області (намети), що примикають до c 1 , знаходить найближчу точку c 2 до qPP1⊆P2⊆…⊆Pk=PPqc1qP1c1c2qв цих нових регіонах, і продовжувати таким чином, поки не досягнемо .Pk
Тепер, якщо знаходиться на краю, то немає жодної проблеми - лише два намети можуть торкатися цього краю, або лише одна з них може покривати край. Таким чином, оновлення c i + 1 від C i в цьому випадку потребує постійного часу.cici+1Ci
Тож проблема полягає в тому, коли лежить на вершині високого ступеня, тому що тоді кількість нових наметів, що прилягають до нього при переході до P i + 1, може бути великою. Щоб подолати це, ми збираємось моделювати вершини великого ступеня як сукупність вершин, що мають низький ступінь. Зокрема, на кожному етапі, якщо C I лежить на вершині V , ми будемо пам'ятати два послідовних ребра е я , е ' я поруч з V , так що найближча точка до ц в Р я + 1ciPi+1civei,e′ivqPi+1лежить на наметі, який або примикає, або охоплює один із цих двох країв. Таким чином, ми можемо робити необхідні обчислення за постійний час.
Тож ми залишаємося проблемою, як слідкувати за цими двома краями під час піднімання вгору.
Щоб зробити це, передобчислювання для кожної вершини з P напрямок дотичної т про . Нехай Q i ( v ) - опуклий багатокутник, який є фігурою вершини v для багатокутника P i (при цьому площина, що визначає вершинну фігуру, має нормальне значення в напрямку t v ). Концептуально, Q 1 ( v ) , Q 2 ( v ) , . . . , Q k ( v )vPtvQi(v)vPitvQ1(v),Q2(v),...,Qk(v)поводиться як ієрархія 2d ДК. Якщо найближча точка на до q лежить на вершині w, то це відповідає v і сусідньому краю e в P i , де ребро e перетинає площину фігури вершини у w . Якщо найближча точка на Q i ( v ) до q лежить на краю e ' , то ви пам’ятаєте два суміжних ребра P i, які визначають дві вершини e ' (тутQi(v)qwvePiewQi(v)qe′Pie′ належить Q i ( v ) ).e′Qi(v)
І тепер ми закінчили ... Дійсно, якщо також знаходиться на Q i + 1 ( v ), то ми можемо оновлювати його в постійному часі (оскільки це лише ієрархія 2d ДК). Якщо з іншого боку c i + 1 більше не знаходиться на Q i + 1 ( v ), він повинен належати до нового намету, який примикає або охоплює попередній пункт c i . У будь-якому випадку ми можемо оновлювати його постійно.ci+1Qi+1(v)ci+1Qi+1(v)ci