Изменения

Перейти к: навигация, поиск

Триангуляция Делоне на сфере

9016 байт добавлено, 19:19, 4 сентября 2022
м
rollbackEdits.php mass rollback
{{wasted}}
== Определения ==
{{Определение
{{Определение
|definition=
'''Критерий Делоне (частный случай для сферы):''' при построении плоскости через три точки, которые образуют треугольник, все остальные точки лежат ниже не выше этой плоскости.
}}
{{Лемма
|about=1
|id=1|statement= Сечение сферы плоскостью есть кругокружность, а основание перпендикуляра, проведенного из центра шара к пересекаемой плоскости, есть центр кругаокружности, полученного полученной в сечении.
|proof=
[[Файл:drawing.png|400px|thumb|right|]]
Пусть плоскость <tex>\alpha</tex> пересекает сферу. Из центра <tex>O</tex> опустим перпендикуляр <tex>OC</tex> на плоскость <tex>\alpha</tex>.
Соединим произвольную точку <tex>M</tex> линии пересения пересечения плоскости <tex>\alpha</tex> со сферой с точками <tex>O</tex> и <tex>C</tex>. Так как <tex>OC</tex> ⊥ <tex>\alpha</tex>, то <tex>OC</tex> ⊥ <tex>CM</tex>.
Рассмотрим треугольник △<tex> OCM </tex> :
{{Лемма
|about=2
|id=2
|statement= Гранями выпуклой оболочки будут выпуклые многоугольники
|proof=
Если существует точка ниже нашей плоскости, то "внутри" выпуклой оболочки содержится точка, что некорректно. Противоречие.
Отсюда, все точки лежат на плоскости, что в нашем случае эквивалентно тому, что они лежат на одной окружности, значит любая триангуляция нашего треуголника многоугольника не нарушит глобальный критерий Делоне(ни в одной окружности, построенной на появившихся в ходе триангуляции треугольников, не будет содержаться точек).
}}
===Время работы===
Мы можем построить выпуклую оболочку за <tex> \mathcal{O}(N \log(N)) </tex>, где <tex>N</tex> {{---}} количество точек.
Удалить треугольники мы можем за <tex>\mathcal{O}(N)</tex>.Триангулиравать грани мы можем за <tex>\mathcal{O}(N)</tex> как было показано выше.
В результате получаем <tex> \mathcal{O}(N \log(N)) </tex>,
== Критерии Локальный критерий Делоне для ребер== 
{{Определение
|definition=
'''Глобальный Локальный критерий Делоне для ребра:''' при построении плоскости через ребро можно провести плоскость тактри точки, что все точки будут лежать образующие треугольник, противолежащие сторонам треугольника вершины соседей лежат ниже этой плоскости.
}}
 {{ОпределениеУтверждение|definitionid=krit_dol1'''Локальный критерий Делоне для ребра|statement=Пусть имеются два треугольника на сфере:''' через ребро можно провести плоскость так<tex>ABC</tex> и <tex>ABD</tex> и точка <tex>E</tex>, находящаяся над плоскостью <tex>ABC</tex>. Точка <tex>D</tex> находится ниже плоскости <tex>ABC</tex>. Сечение построенной на ребре <tex>AB</tex> и точке <tex>O</tex> делит сферу на две полусферы. Если полусфера, что вершиныне содержащяя треугольник <tex>ABC</tex>, противолежащие этому ребрусодержит точки <tex>E</tex> и <tex>D</tex>, будут лежать ниже этой плоскостито точка <tex>E</tex> лежит надо плоскостью <tex>ABD</tex>.|proof=Факт очевиден.
}}
 
{{Утверждение
|id=krit_dol1
|statement=Глобальный и локальный критерии Делоне для треугольника равносильны.
|proof=
[[Файл:dol1.png|400px|thumb|right|]]
Предположим противноеИз глобального в локальный очевидно. Из локального в глобальный: Пусть выполняется локальный критерий, то есть для каждого треугольника мы можем провести плоскость, в секторе у ребра что соседние вершины для треугольника будут лежать не выше нашей плоскости.Но нашелся треугольник <tex>ABABC</tex> нашли множество точек из триангуляции, что для него не выполняется глобальный критерий, т. Треугольник е существует какая-то точка <tex>ADBE</tex> смежный, при том которая лежит выше плоскости <tex>ABC</tex>.В силу того, что локальный критерий выполняется, эта точка не принадлежит соседним треугольникам, в частности смежному треугольнику <tex>DABD</tex> по ребру <tex>AB</tex> За <tex>AB</tex> лежит под окружностью. Рассмотрим точку мы обозначили ребро, из которого видна точка <tex>E</tex> из того множества, т. Так как е такое ребро, что если провести сечение через точки <tex>ABA</tex> является пересечением плоскостей , <tex>ABCB</tex> и <tex>ADBO</tex>(центр окружности), то точка <tex>E</tex> содержится в полусфере, не содержащей треугольник <tex>ABC</tex>. Так как точка <tex>DE</tex> лежит под над плоскостью <tex>ABC</tex>, а точка <tex>ED</tex> над ней =под плоскостью <tex>ABC</tex> , то точка <tex>E</tex> лежит над плоскостью <tex>ADBABD</tex>. (с учетом того, что они лежат в одной полусфере, ребро AB общее и отделяет треугольник <tex>ABC</tex> от полусферы) (по утверждению выше) Посмотрим, существует ли у треугольника <tex>ABD</tex> смежный треугольник, содержащий вершину <tex>E</tex>:#Если треугольник он существует, то локальный критерий для треугольника <tex>AEDADE</tex> не выполняется. Противоречие.#Если он не существует, то повторим итерациюточка <tex>E</tex> так же будет лежать "над" каким-то смежным с <tex>ABD</tex> треугольником, иначе так как для треугольника <tex>ADBABD</tex> не будет будут выполняться те же условия, что и для <tex>ABC</tex>. Перейдем к такому треугольнику и повторим шаг. Заметим, что наш процесс есть локализация. Мы пустили луч (в ту сторону, где видим точку <tex>E</tex>) из исходного треугольника и идём вдоль него. В какой-то момент мы окажемся рядом с треугольником <tex>XYZ</tex>, для которого точка E выше плоскости, построенной на его трех точках, и в тоже время вершина E содержится в соседнем треугольнике, что нарушает локальный критерий. Противоречие. Значит глобальный критерий Делоне выполняется.
}}
==Локальный критерий Критерии Делонедля ребер=={{Определение|definition='''Глобальный критерий Делоне для ребра:''' через ребро можно провести плоскость так, что все точки будут лежать не выше этой плоскости.}}
{{Определение
|definition=
'''Локальный критерий Делонедля ребра:''' при построении плоскости через три точкиребро можно провести плоскость так, образующие треугольникчто вершины, противолежащие сторонам треугольника вершины соседей лежат ниже этому ребру, будут лежать не выше этой плоскости.
}}
[[Файл:dol2.png|right]]
Из глобального в локальный очевидно, докажем обратно.
Предположим противное, то есть найдётся такая плоскость, что вершины треугольников при ребре <tex>AB</tex> лежат под ней, но существует какая-то вершина <tex>F</tex> над ней. Проведём окружность с центром в сфере через <tex>AB</tex> и выберем треугольник лежащий в одной полусфере с точкой <tex>F</tex>, назовём его <tex>ABC</tex>. Точка <tex>E</tex> лежит над плоскостью Для треугольника <tex>ABC</tex> => <tex>F</tex> лежит внутри окружности около <tex>ABC</tex>. Возьмем треугольника при ребрене выполняется глобальный критерий Делоне, в чьем сегменте оказалась точка <tex>F</tex> поэтому воспользуемся алгоритмом из утверждения "Глобальный и локальный критерии Делоне равносильны" и назовем его найдем треугольник для которого не будет выполняться локальный критерий Делоне <tex>ABC\Rightarrow</tex>для одного из ребер найденного треугольника не выполняется локальный критерий Делоне. Если не существует смежный с ним треугольник при вершине <tex>F</tex>, то повторим итерацию!!!Следовательно, иначе противоречие с локальным критерием глобальный критерий Делонедля ребра выполняется.
}}
{{Утверждение
[[Файл:dol3.png|400px|thumb|right|]]
Из треугольника в ребра: если для каждого треугольника выполнен критерий, то для каждого ребра можно рассматривать плоскость при любом треугольнике при ребре.
 Обратно: Рассмотрим треугольник <tex>ABC</tex>, для каждого из ребра можно провести плоскость и они , такую что все точки будут лежать не выше её. Три плоскости образуют трехмерный угол, снаружи которого нет точек(снаружи == выше каждой плоскости при ребре). В пересечении угла и плосокости плоскости <tex>ABC</tex> образуется тетраэдр. Если в нем нет точек, значит точек нет и над плоскостью треугольника (точек снаружи тетраэдра нету), значит глобальный критерий выполняется. Проверим это. Пусть в нем есть точки, то тогда эти точки есть оказались внутри треугольника, тогда это не триангуляция => точек в тетраэдре нет => плоскостью <tex>ABC</tex> можно отделить пространство с точками => выполняется глобальный критерий.
}}
 
Будем называть '''хорошими''' те рёбра, для которых выполняется локальный критерий Делоне.
{{Лемма
}}
Из [[#fliplemmasphere|леммы 4]] следует, что если ребро плохое, то флип сделает его хорошим.
[[Файл:file12345.png|400px|thumb|right|Красное ребро — до флипа, синее зеленое — после]]
{{Лемма
|about=5
{{Лемма
|about=6
|id=6
|statement=
Флипами можно достичь хорошей триангуляции за конечное время.
|proof=
[[Файл:Lemma7.jpg|right||Точка <tex>P</tex> вставлена в треугольник]]
Пусть мы вставляем точку <tex>P</tex>. Предположим, она была вставлена в треугольник <tex>ABC</tex> не на ребро. Рассмотрим любое из рёбер — пусть это будет ребро <tex>PC</tex>. Тогда проведем через точки <tex>A</tex>, <tex>B</tex>, <tex>C</tex> плоскость <tex>\alpha</tex>, а так же проведем касательную плоскость <tex>\beta</tex> к сфере через точку <tex>C</tex>. Начнем уменьшать между этими плоскостями угол, двигая вращая <tex>\alpha</tex> к <tex>\beta</tex>вокруг их линии пересечения. В какой-то момент <tex>\alpha</tex> пересечет точку <tex>P</tex>, а тогда мы предоставили плоскость, от которой все точки триангуляции находятся по одну сторону, так как изначально выше <tex>\alpha</tex> была только точка <tex>P</tex>, а значит, ребро <tex>PC</tex> удовлетворяет глобальному критерию Делоне. Аналогично для ребер <tex>PA</tex> и <tex>PB</tex>.
Случай, когда точка вставляется на ребро, рассматривается аналогично.
}}
 
{{Утверждение
|id=trianglepossession
|statement=Пусть даны точки <tex>P</tex>, <tex>A</tex>, <tex>B</tex>, <tex>C</tex> на сфере с центром <tex>O</tex>, тогда <tex>P</tex> принадлежит треугольнику <tex>ABC</tex>, тогда и только тогда, когда поворот <tex>P</tex> относительно плоскостей <tex>AOB</tex>, <tex>BOC</tex>, <tex>COA</tex> одинаковый.
}}
====Проверка местоположения точки относительно окружности описанной около треугольника====
[[Файл:1st pred dol ph.png|right]]
 
Рассмотрим <tex> \triangle ABC </tex> и некоторую точку <tex> D </tex>, все точки лежат на сфере. Задача состоит в том чтобы проверить, где лежит точка <tex> D </tex> относительно окружности описанной около <tex> \triangle ABC </tex>. Заметим, что 3 точки задают плоскость, которая пересекает сферу, образует окружность описанную около <tex> \triangle ABC </tex> и все точки на сфере, что лежат внутри окружности будут находится над плоскостью. Переформулируем задачу, мы будем искать положение точки <tex> D </tex> относительно плоскости <tex> \triangle ABС </tex>. Заметим, что если угол между нормалью <tex> \triangle ABC </tex> и вектором <tex> AD < 90 </tex>, то точка лежит над плоскостью, если <tex> = 90 </tex>, то на плоскости, а если <tex> > 90 </tex>, то снизу. Это означает, найдя скалярное произведение этих векторов мы определим положение точки относительно описанной окружности. Т к нам важен только знак скалярного произведения, то <tex> \vec{n}_{ABC} </tex> можно не нормировать.
 
<tex> \vec{n}_{ABC} = (B - A) \times (C - A) </tex>
 
<tex> k = \vec{n}_{ABC} \cdot (D - A) = ((B - A),(C - A),(D - A)) = \begin{vmatrix} B - A \\ C - A \\ D - A \end{vmatrix} </tex>
<tex> = \begin{vmatrix} B & 1 \\ C & 1 \\ D & 1 \\ A & 1 \end{vmatrix} = - \begin{vmatrix} A & 1 \\ B & 1 \\ C & 1 \\ D & 1 \end{vmatrix} </tex>
===Вставка точки===
В обоих случаях для удобства реализации сначала добавим к триангуляции центр сферы.
В самом начале для удобства реализации добавим к триангуляции центр сферы. Первую добавленную точку на сфере соединим с точкой <tex>O</tex>, вторую точку соединим с предыдущей точкой и центром сферы, третью - со всеми предыдущими. Получим выпуклое тело, далее точки вставляются либо на поверхность этого тела, либо за ее пределами. ==== Вставка точки, лежащей внутри триангуляции на поверхности сферы ====[[Файл:InsertAdd_into.jpg|left||Вставка внутрь треугольника]][[Файл:Add_on_edge.jpg|right||Вставка в треугольникна ребро треугольника]]
Пусть мы добавляем точку <tex>P'</tex>. Для начала локализуемся: поймём, в каком фейсе она лежит (или на каком ребре).
Если же точка лежит на ребре, два смежных с ребром фейса превращаем в два новых, добавляем ещё два, а так же превращаем ребро, на которое вставляется точка, в ребро, которое заканчивается в этой точке, и вставляем три новых.
Итого у нас появилось несколько новых рёбер. Они все хорошие (по [[#newedgeslemma| лемме 7]]), плохими могут оказаться только рёбра, противолежащие вставленной точке. Флипаем рёбра, пока триангуляция не станет хорошей. ====Вставка точки, лежащей снаружи триангуляции====[[Файл:Insert.jpg|right||Вставка в треугольник]]
==== Вставка точки, лежащей снаружи триангуляции на поверхности сферы ====Пусть мы добавляем точку <tex>P''</tex>. Нам нужно научиться вставлять точку в треугольник, одной из вершин которого является центр сферы. На самом деле , это делается теперь получится сделать естественным образом. Так как для локализации в треугольнике определения принадлежности точки треугольнику на поверхности сферы мы использовали смотрим на предикат поворота относительно плоскости, проходящей через центр сферы и ребро, и вставляемой точки <tex>P``''</tex>, то для проверки попадания в треугольник, содержащий центр сферы достаточно проверить, что точка <tex>O</tex> видна из точки <tex>P''</tex>, т.е. точка <tex>P''</tex> находится по определенную сторону от плоскости, проходящей через ребро и точку <tex>O</tex>, и противоположенная вершина для ребра является центром сферы.
         ==== Время работы ====
{{Лемма
|about=8
|id=8
|statement=
При вставке точки будут флипаться только рёбра, противолежащие вставленной точке.
|id=opposingedgeslemma
|proof=Доказательство по индукции.
[[Файл:Opposit_flip_named.jpg|right|| Флип противолежащего ребра]]
База. По [[#newedgeslemma|лемме 7]] изначально не будут флипаться новые рёбра, инцидентные точке, то есть плохими могут оказаться только рёбра, противолежащие точке.
Переход. Пусть мы вставили точку <tex>P</tex>. Рассмотрим, что произойдёт с противолежащим ей ребром <tex>AC</tex> после флипа, если оно плохое. До вставки точки <tex>P</tex> для триангуляции выполнялся глобальный критерий Делоне, поэтому плоскость <tex>\alpha</tex>, проходящая через точки <tex>A</tex>, <tex>C</tex> и <tex>D</tex> содержала все точки по одну сторону от себя, теперь же по другую сторону еще будет только точка <tex>P</tex>. Проведем плоскость <tex>\beta</tex> через точки <tex>P</tex> и <tex>D</tex> так, что линия пересечения <tex>\alpha</tex> и <tex>\beta</tex> лежала бы в одной плоскости с касательной на сфере через точку <tex>D</tex> к окружности, проходящей через точки <tex>A</tex>, <tex>C</tex> и <tex>D</tex>. Тогда уменьшая угол между этими плоскостями, двигая вращая <tex>\alpha</tex> к <tex>\beta</tex>вокруг линии пересечения плоскостей, найдем момент, когда <tex>\alpha</tex> пересечет точку <tex>P</tex>, а значит, в окружности, отсекаемой в этот момент плоскостью <tex>\alpha</tex> не будет никаких точек. Значит, ребро <tex>PD</tex> хорошее. Значит, после своего флипа ребро <tex>AC</tex> уже не будет флипаться. Так как для рёбер <tex>AP</tex> и <tex>CP</tex> выполняется критерий Делоне, то плохими после флипа могут стать только рёбра <tex>AD</tex> и <tex>CD</tex> — то есть рёбра, противолежащие точке <tex>P</tex>.
}}
{{Лемма
|about=О степени вершины
|id=vertex_st|statement=Математическое ожидание степени вершины после её вставки в триангуляцию Делоне равна равно <tex>O(1)</tex>.
|id=deglemma
|proof=
Предположим, что мы вставляем <tex>i+1</tex>-ую точку из последовательности из <tex>n</tex> точек. Рассмотрим все перестановки из этих <tex>i+1</tex> точек, означающие порядок вставки этих точек. Всего таких перестановок <tex>(i+1)!</tex>. Тогда средняя степень последней вершины среди перестановок равна:
<tex>E(\operatorname{deg}(v_{i+1}))=\frac {\sum_{p=\operatorname{perm}(v_0, v_1, ..., v_i)} \operatorname{deg} (p[i+1])} {(i+1)!}</tex>
Каждая из <tex>i+1</tex> вершин побывает последней ровно <tex>i!</tex> раз, поэтому:
Из-за того, что у нас сфера, и задача триангуляции сведена к задаче построения выпуклой оболочки, то, следовательно, нам перестает быть важным критерий Делоне, нам просто нужно у звездного многоугольника на сфере как-то провести ребра так, чтобы было выпукло.
Представим себе, что вместо того, чтобы удалять точку, мы просто опускаем ее во внутрь до тех пор, покаона пока она не перестает быть видимой в построенном на триангуляции многоугольнике. Предположим, что мы находимся в удаляемой точке, движемся в центр сферы и смотрим только в направлении движения.
{{Лемма
|about=9
|id=9
|statement=
Изначально нам будут видны грани, которые образуются внутри звездного многоугольника.
* рассмотрим <tex>\varepsilon</tex>-окресности центров отрезков.
Если мы точку спустим к центру сферы еще немного, то этот треугольник виден не будет, но <tex>\varepsilon</tex>-окрестности будут видны две какие-то точки. Соединим их отрезком.
Этот отрезок будет виден. Он не будет лежать на плоскосиплоскости. Он не будет лежать под плоскостью. Тогла получается, что он лежит над плоскостью(ближе к краю сферы), значит, многогранник был невыпуклый.
Получается, что грань ушла и у нее только один видимый сосед. Мы можем выделить грань как ухо.
# Общий случай, когда четыре точки в звездном многоугольнике могут лежать на одной окружности рассматривается аналогично.
====Алгоритм удаления точки====
# Уберем точку.
# Сделаем приоритетную очередь, в которой будем хранить пары отрезков, образующие ухо. Для этой очереди будем использовать TODO предикат, сортирующий уши в порядке, в котором они пересекают луч по направлению от удаляемой точки к центру сферы.
# На очередном шаге достаем ухо, отделяем его.
# Добавляем в очередь получившиеся новые уши.
 
=====Предикат=====
[[Файл:sphere_del.png|400px|thumb|right| <tex> ABC</tex> {{---}} грань, <tex> O </tex> {{---}} центр сферы, <tex> P </tex> {{---}} удаляемая точка ]]
При удалении точки, луч, исходящий из центра окружности в точку, пересекает плоскость очередной грани в некоторй точке <tex> T</tex>.
Эту точку можно записать как <tex> T = O + kP </tex>, где <tex> O </tex> {{---}} центр сферы, а <tex> p </tex> {{---}} удаляемая точка.
Зпишем предикат при которм наша точка <tex>kP</tex> лежит на плоскости, проходящей через <tex>ABC</tex>:
<tex>\begin{vmatrix} A & 1 \\ B & 1 \\ C & 1 \\ kP & 1 \end{vmatrix} = 0 </tex>
 
Распишем и разложим по последней строке:
<tex>\begin{vmatrix} A & 1 \\ B & 1 \\ C & 1 \\ kP & 1 \end{vmatrix} =
\begin{vmatrix} a_x & a_y & a_z & 1 \\ b_x & b_y & b_z & 1 \\ c_x & c_y & c_z & 1 \\ kp_x & kp_y & kp_z & 1 \end{vmatrix} = k\begin{vmatrix} A & 1 \\ B & 1 \\ C & 1 \\ P & 0 \end{vmatrix} + \begin{vmatrix} A \\ B \\ C \end{vmatrix} = 0</tex>
 
Тогда условие, по которому мы будем устанавливать порядок в приоритетной очереди будет:
:: <tex>k = - \frac{\begin{vmatrix} A & 1 \\ B & 1 \\ C & 1 \\ P & 0 \end{vmatrix}}{\begin{vmatrix} A \\ B \\ C \end{vmatrix}}</tex>
====Время работы====
{{Лемма
|about=О количестве уровней
|id=10
|statement= Математическое ожидание уровней в локализационной структуре <tex> O(\log{n}) </tex>.
|proof= То же самое, что и для [[Триангуляция Делоне#levelslemma|плоскости]].
|proof= Опять же доказательство копируется с плоскости.
}}
 
====Принадлежность треугольнику====
Пусть даны точки <tex>P</tex>, <tex>A</tex>, <tex>B</tex>, <tex>C</tex> на сфере с центром <tex>O</tex>, тогда <tex>P</tex> принадлежит треугольнику <tex>ABC</tex>, тогда и только тогда, когда поворот <tex>P</tex> относительно плоскостей <tex>AOB</tex>, <tex>BOC</tex>, <tex>COA</tex> одинаковый.
====Алгоритм====
{{Лемма
|about=10
|id=111
|statement=Алгоритм найдет ближайшую точку
|proof=Допустим, что это не так. Это значит, что в внутри окружности с центром в точке <tex>Q</tex>, на которой лежит точка <tex>P</tex>, есть какие-то другие точки. То есть другими словами существует плоскость <tex>\alpha</tex> проходящая через точку <tex>P</tex>, выше которой находятся точка <tex>Q</tex>(так как она центр) и какие-то точки триангуляции.
{{Лемма
|about=11
|id=212
|statement=Среднее число точек, лежащих внутри окружности с центром в точке <tex>Q</tex> и проходящей через точку <tex>V_{i + 1}</tex> равно <tex>O(1)</tex>.
|proof=Рассмотрим точки триангуляции <tex>\{A_i\}</tex>. Для каждой точки <tex> A_i</tex> проведем окружность с центром в ней, проходящую через ближайшую к ней точку. Посчитаем во сколько окружностей в среднем попадет точка какая-то точка <tex>U</tex>.
{{Лемма
|about=12
|id=313|statement=Средняя степень точек на <tex>i</tex> уровне внутри окружности с центром в точке <tex>Q</tex> и проходящей через точку <tex>P_{i + 1}</tex>(ближайшая точка на <tex>i + 1</tex> уровне)равна <tex>O(1)</tex>
|proof=Пусть есть функция <tex>circle(q, p, i)</tex>, возвращающая <tex>1</tex>, если точка <tex>p</tex> принадлежит окружности с центром в точке <tex>q</tex>, проходящую через ближайшую к <tex>q</tex> на <tex>i</tex> уровне точку, а иначе <tex>0</tex>.
{{Лемма
|about=13|id=415|statement=Один уровень в среднем обрабатывается за Степень ближайшей вершины <tex>O(1)</tex>|proof=По Доказательство копирует случай на [[Триангуляция Делоне#2nearestdegreelemma|лемме 11плоскости]] алгоритм пройдет в среднем <tex>O(1)</tex> вершин, степень которых так же равна по [[#3|лемме 12]] <tex>O(1)</tex>, следовательно один уровень будет обработан за <tex>O(1)</tex>.
}}
{{Лемма
|id=16|statement=Точка на сфере может быть ближайшей для не более Один уровень в среднем обрабатывается за <tex>6O(1)</tex> точек.|proof=Пусть это не так. Тогда некоторая точка По [[#2|лемме 11]] алгоритм пройдет в среднем <tex>U</tex> является ближайшей для <tex>7</tex> точек: <tex>A_1 \dots A_7</tex>. Проведем плоскости вида <tex>UO A_i</tex>. Угол мнежду этими плоскостями строго меньше <tex>60</tex> градусов O(иначе сумма углов превосходила бы <tex>360</tex>1). Рассмотрим плоскость <tex> A_i U A_{i + 1} </tex>. Угол вершин, степень которых так же равна по [[#3|лемме 12]] <tex> A_i U A_{i + O(1} )</tex> равен углу между плоскостями , следовательно один уровень будет обработан за <tex>UOA_i</tex> и <tex>UOA_{i + O(1})</tex>(следовательно он меньше 60 градусов), аналогично для других углов треугольника.
}}
{{Лемма
|statement=Степень ближайшей вершины <tex>O(1)</tex>
|proof=TBD
}}
{{Лемма
|id=17|statement=На третьем втором этапе алгоритма луч в среднем пересечет <tex>O(1)</tex> ребер.
|proof=Рассмотрим окружность с центром в точке <tex>Q</tex>, проходящую через ближайшую для неё точку триангуляции <tex>P_{i + 1}</tex>.
Количество таких ребер, хотя бы одна граница которых принадлежит окружности не превосходит суммы степеней вершин внутри окружности, следовательно их <tex>O(1)</tex>.
|about=Следствие
|statement=Локализация в среднем работает за <tex>O(\log{n})</tex>
|proof=
}}
 
 
{{Лемма
|id=18
|statement=Точка на сфере может быть ближайшей для не более <tex>6</tex> точек.
|proof=Пусть это не так. Тогда некоторая точка <tex>P</tex> является ближайшей для <tex>7</tex> точек: <tex>A_1 \dots A_7</tex>. Проведем отрезки <tex>P A_i</tex>. Сумма углов между этими отрезками(дугами) равна <tex>2\pi</tex>
 
Рассмотрим треугольник <tex>A_i P A_{i + 1}</tex>, где угол <tex>A_i P A_{i + 1}</tex> минимальный. Он строго меньше <tex>\dfrac{\pi}{3}</tex> (иначе сумма углов была бы больше <tex>2\pi</tex>).
[[https://lurklurk.com/Британские_учёные |Британкие ученые доказали]}, что сумма углов в сферическом треугольнике строго больше <tex>\pi</tex>(школьный факт).
Однако по сферической теореме синусов напротив максимальной стороны лежит максимальный угол. Значит в таком треугольнике сумма углов меньше <tex>\pi</tex>. Противоречие.
}}
1632
правки

Навигация