Триангуляция Делоне на Сфере — различия между версиями
Novik (обсуждение | вклад) (→Алгоритм) |
Novik (обсуждение | вклад) |
||
Строка 18: | Строка 18: | ||
===Принадлежность треугольнику=== | ===Принадлежность треугольнику=== | ||
− | Пусть | + | Пусть даны точки <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> одинаковый. |
===Алгоритм=== | ===Алгоритм=== | ||
Строка 34: | Строка 34: | ||
Пусть между плоскостями <tex>\alpha</tex> и <tex>\beta</tex> угол <tex>\gamma</tex>. Начнем его уменьшать, то есть поворачивать плоскость <tex>\beta</tex>. Очевидно, что она начнет пересекать сферу, тогда она будет соответствовать какой-то окружности на сфере. При этом все точки сферы, которые выше плоскости <tex>\beta</tex> будут выше плоскости <tex>\alpha</tex>, значит это будет вложенная окружность. | Пусть между плоскостями <tex>\alpha</tex> и <tex>\beta</tex> угол <tex>\gamma</tex>. Начнем его уменьшать, то есть поворачивать плоскость <tex>\beta</tex>. Очевидно, что она начнет пересекать сферу, тогда она будет соответствовать какой-то окружности на сфере. При этом все точки сферы, которые выше плоскости <tex>\beta</tex> будут выше плоскости <tex>\alpha</tex>, значит это будет вложенная окружность. | ||
Будем уменьшать угол <tex>\gamma</tex> до того момента, когда какая-то точка <tex>P'</tex>, лежащая внутри окружности(такая есть по предположению), не станет принадлежать плоскости <tex>\beta</tex>. В этот момент выше плоскости <tex>\beta</tex> нет ни одной точки из триангуляции. Значит для ребра <tex>PP'</tex> можно провести окружность, не содержащую других точек, то есть выполняется глобальный критерий Делоне. Значит в триангуляции должно быть ребро <tex>PP'</tex>, и по алгоритму мы должны были его перебрать и увидеть, что <tex>P'</tex> ближе к точке <tex>Q</tex> и перейти к ней. Получили противоречие, значит алгоритм правильно находит ближайшую точку. | Будем уменьшать угол <tex>\gamma</tex> до того момента, когда какая-то точка <tex>P'</tex>, лежащая внутри окружности(такая есть по предположению), не станет принадлежать плоскости <tex>\beta</tex>. В этот момент выше плоскости <tex>\beta</tex> нет ни одной точки из триангуляции. Значит для ребра <tex>PP'</tex> можно провести окружность, не содержащую других точек, то есть выполняется глобальный критерий Делоне. Значит в триангуляции должно быть ребро <tex>PP'</tex>, и по алгоритму мы должны были его перебрать и увидеть, что <tex>P'</tex> ближе к точке <tex>Q</tex> и перейти к ней. Получили противоречие, значит алгоритм правильно находит ближайшую точку. | ||
+ | }} | ||
+ | |||
+ | {{Лемма | ||
+ | |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>. | ||
+ | Проведем через <tex>OU</tex> три плоскости так, чтобы они делили всё пространство на <tex>6</tex> равных частей. Покажем, что в одной части <tex>O(1)</tex> окружностей будут включать в себя точку <tex>U</tex>, тогда всего таких окружностей будет тоже <tex>O(1)</tex>. | ||
+ | Рассмотрим одну часть. Отсортируем точки, которые ей принадлежат, по степени удаленности от точки <tex>U</tex>. Окрасим точки в два цвета: | ||
+ | * красный {{---}} точки с <tex>i</tex> уровня | ||
+ | * черный {{---}} точки с <tex>i + 1</tex> уровня | ||
+ | Если на <tex>j</tex>-ой позиции находится черная точка, то точки с индексом <tex>j + 1</tex> и далее не будут содержать в окружности точку <tex>U</tex>(потому что <tex>j</tex> была ближайшей на предыдущем уровне из этой части пространства). Тогда если <tex> X </tex> {{---}} количество окружностей, которым принадлежит точка <tex>U</tex>, то так как точка проходит на следующий уровень с вероятностью <tex>p</tex>: | ||
+ | |||
+ | <tex>E(X) \leqslant \sum\limits_{i = 1\dots\inf}{i \cdot p(1 - p) ^ i} = </tex> | ||
+ | <tex>\sum\limits_{i = 1\dots\inf}{\sum\limits_{j = i\dots\inf}{p (1 - p) ^ j}} = </tex> | ||
+ | <tex>p\sum\limits_{i = 1\dots\inf}{(1-p)^i \cdot (\sum\limits_{j = 0\dots\inf}{(1 - p) ^ j})} = \sum\limits_{i = 1\dots\inf}{(1-p)^i} = \frac{1-p}{p} = O(1)</tex> | ||
+ | Получается, что каждая точка принадлежит <tex>O(1)</tex>, следовательно внутри каждой окружности содержит <tex>O(1)</tex> точек. | ||
}} | }} |
Версия 21:39, 20 ноября 2016
Содержание
Динамический алгоритм
Локализация в триангуляции
Построим алгоритм на сфере по аналогии с плоскостью.
Структура данных
Локализационная структура состоит из нескольких уровней, где каждый уровень — триангуляция Делоне. На нижнем уровне содержатся все точки. Далее точка с вероятностью
попадает на следующий уровень. Если на последнем уровне находится одна точка, то дальше она уже не пойдет.Лемма (О количестве уровней): |
Математическое ожидание уровней в локализационной структуре . |
Доказательство: |
То же самое, что и для плоскости. |
Утверждение: |
Локализационная структура занимает памяти. |
Опять же доказательство копируется с плоскости. |
Принадлежность треугольнику
Пусть даны точки
, , , на сфере с центром , тогда принадлежит треугольнику , тогда и только тогда, когда поворот относительно плоскостей , , одинаковый.Алгоритм
Чтобы найти треугольник, которому принадлежит точка запроса(точка
), сначала найдем ближайшую к ней точку триангуляции(точка ), а зачем вдоль луча будем обходить треугольники, пока не локализуемся.Поиск точки
:- На последнем уровне нашей структуры находиться точек, поэтому просто переберем эти точки и найдем ближайшую к .
- При переходе с уровня на новая ближайшая точка может быть только внутри окружности с центром в точке проходящей через точку (ближайшая точка на уровне). Переберем всех соседей точки и выберем ближайшего к точке . Повторяем эту операцию, пока можем приближаться к точке запроса.
Лемма: |
Алгоритм найдет ближайшую точку |
Доказательство: |
Допустим, что это не так. Это значит, что в внутри окружности с центром в точке Будем уменьшать угол , на которой лежит точка , есть какие-то другие точки. То есть другими словами существует плоскость проходящая через точку , выше которой находятся точка (так как она центр) и какие-то точки триангуляции. Проведем в точке касательную плоскость к сфере. Очевидно, что она делит всё пространство на части: в первой нет никаких точек, а во второй находятся все точки триангуляции. Пусть между плоскостями и угол . Начнем его уменьшать, то есть поворачивать плоскость . Очевидно, что она начнет пересекать сферу, тогда она будет соответствовать какой-то окружности на сфере. При этом все точки сферы, которые выше плоскости будут выше плоскости , значит это будет вложенная окружность. до того момента, когда какая-то точка , лежащая внутри окружности(такая есть по предположению), не станет принадлежать плоскости . В этот момент выше плоскости нет ни одной точки из триангуляции. Значит для ребра можно провести окружность, не содержащую других точек, то есть выполняется глобальный критерий Делоне. Значит в триангуляции должно быть ребро , и по алгоритму мы должны были его перебрать и увидеть, что ближе к точке и перейти к ней. Получили противоречие, значит алгоритм правильно находит ближайшую точку. |
Лемма: |
Среднее число точек, лежащих внутри окружности с центром в точке и проходящей через точку равно . |
Доказательство: |
Рассмотрим точки триангуляции . Для каждой точки проведем окружность с центром в ней, проходящую через ближайшую к ней точку. Посчитаем во сколько окружностей в среднем попадет точка какая-то точка . Проведем через три плоскости так, чтобы они делили всё пространство на равных частей. Покажем, что в одной части окружностей будут включать в себя точку , тогда всего таких окружностей будет тоже . Рассмотрим одну часть. Отсортируем точки, которые ей принадлежат, по степени удаленности от точки . Окрасим точки в два цвета:
Если на -ой позиции находится черная точка, то точки с индексом и далее не будут содержать в окружности точку (потому что была ближайшей на предыдущем уровне из этой части пространства). Тогда если — количество окружностей, которым принадлежит точка , то так как точка проходит на следующий уровень с вероятностью :Получается, что каждая точка принадлежит , следовательно внутри каждой окружности содержит точек. |