Изменения
→Связь пересечения полуплоскостей с выпуклой оболочкой
[[Файл:samplesHalfspaces.png|400px|thumb|right|Пересечение существует и выпукло, неограничено неограниченно или пусто]][[Файл:halfSpaces.png|400px|thumb|right|Нужна ли нам верхняя полуплоскость?]]
== Предикат трех прямых ==Задача: есть конечное множество полуплоскотейполуплоскостей, найти фигуру их пересечения или сообщить что оно пусто.
Для начала заметим, что если пересечение не пусто, то оно выпукло. (Доказательство {{---}} Пересечение выпуклых фигур выпукло, а полуплоскоть полуплоскость выпукла)
Пусть у нас прямые полуплоскости заданы уравнениями вида прямых и ориентацией, с какой стороны от прямой лежит полуплоскость. Сначала рассмотрим все полуплоскости, которые "смотрят", то есть ориентированны, вниз. Аналогично можно рассмотреть все полуплоскости, которые ориентированны вверх. {{Лемма|statement=[[Файл:halfSpaces.png|400px|thumb|right|Нужна ли полуплоскость <tex> Ax + By + C = 0 l'' </tex>?]]Предикат проверки (см. Тогда предикат проверки рисунок) того, что прямая <tex> l'' : A''x + B''y + C'' = 0 </tex> лежит над пересечением прямых <tex> l : Ax + By + C = 0 </tex> и <tex> l' : A'x + B'y + C' = 0 </tex> будет равен: знаку определителя <tex>
\begin{vmatrix}
A & B & C \\
\end{vmatrix}
</tex>.
|proof=Докажем это. Для проверки предиката нам надо нужно определить знак выражения <tex> A''x_0 + B''y_0 + C'' </tex>, где <tex> (x_0, y_0) </tex> {{---}} точка пересечения прямых <tex> l' </tex> и <tex> l </tex>. Эту точку можно найти Эта точка находится из уравнения <tex>\begin{pmatrix}
A & B\\
A' & B'
-C'
\end{pmatrix}
</tex>. Решением будет <tex>
\begin{pmatrix}
x_0\\
\end{vmatrix}
}
</tex>. Подставим это решение в <tex> A''x_0 + B''y_0 + C'' </tex> и домножим на определитель:. <tex>A'' \left<(B'; -B);(-C; -C')\right> + B'' \left<(-A'; A);(-C; -C')\right> + C'' \begin{vmatrix} A & B \\ A' & B' \end{vmatrix} =</tex>
<tex> = A'' (\begin{vmatrix} B'; -& B)(\\ -C; ' & -C') + \end{vmatrix} - B'' (-\begin{vmatrix} A'; & A)(\\ -C; ' & -C') \end{vmatrix} + C '' \begin{vmatrix} A & B A' \\ A' B & B' \end{vmatrix} =</tex> <tex>= A'' \begin{vmatrix} B' & B \\ -C' & -C \end{vmatrix} - B'' \begin{vmatrix} A' & A \\ -C' & -C \end{vmatrix} + - C'' \begin{vmatrix} A ' & A' \\ B ' & B' \end{vmatrix} = \begin{vmatrix} A'' & A' & A \\ B'' & B' & B \\ -C'' & -C' & -C \end{vmatrix} =</tex><tex>= \begin{vmatrix} A & B & C \\ A' & B' & C' \\ A'' & B'' & C'' \end{vmatrix} </tex>}} Таким образом, если представить прямую <tex> Ax + By + C = 0 </tex>как точку с однородными координатами <tex> (A, B, C) </tex>, то этот предикат {{---}} всего лишь поворот, а проверка предиката {{---}} проверка очередной точки в [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull#Алгоритм Грэхема|обходе Грэхема]] для нахождения выпуклой оболочки. Алгоритм:* Отсортировать все полуплоскости по углу наклона;* Запустить обход Грэхема для полуплоскостей, смотрящих вниз (с предикатом-определителем);* Запустить обход Грэхема для полуплоскостей, смотрящих вверх;* Пересечь две цепочки. От пересечения цепочек напрямую зависит фигура пересечения: неограниченная область получается если одна из цепочек пуста, а ограниченная {{---}} когда обе цепочки не пусты и пересекаются. == Связь пересечения полуплоскостей с выпуклой оболочкой == {{Лемма |id=1|statement= Пересечение полуплоскостей может быть получено построением выпуклой оболочки в [[двойственное пространство|двойственном прострастве]] для множества точек, являющихся дуальным преобразованием исходных полуплоскостей|proof= [[Файл:DualSpaceCH.png |400px|thumb|right| Множество точек в двойственном пространстве]][[Файл:DualSpaceCH400.png |400px|thumb|right| Множество прямых в исходном пространстве]]
'''Важно:''' В картинке перепутаны <tex>P</tex> и <tex>P^\star</tex>. TODO
Рассмотрим планарный случай и предположим, что вертикальные и параллельные прямые отсутствуют (в конце приведем два способа решения данной проблемы).
'''Важно 2:''' * <tex> Dp^\star</tex> - точка в двойственном пространстве, <tex>p</tex> - линия в исходном,* <tex>l^\star</tex> - прямая в двойственном пространстве, <tex>l</tex> - точка в исходном,* Значок <tex>*</tex> означает, что элемент из двойственного пространства.Рассмотрим множество точек(<tex>P^\star</tex>) в двойственном пространстве и рассмотрим верхнюю часть выпуклой оболочки, построенной на этих точках. Обозначим её за <tex>\mathcal{UH}</tex>(Y = kX + bUpper hull) = P. Далее мы будем работать только с прямыми(kв исходном пространстве), у которых вектор нормали направлен вниз, т.е они образовывают верхнюю цепочку.По свойству выпуклой оболочки, -b) любое ребро из цепи <tex>\mathcal{UH}</tex> содержит "ниже" себя все точки множества <tex>P^\star</tex>, а так же эта цепь соединяет самую правую точку с самой левой.
Таким образом получаем алгоритм:* Считаем <tex> H_+ </tex>мы построили верхнее пересечение полуплоскостей. (полуплоскостиАналогичным образом строится нижнее, смотрящие вверх)затем мы пересекаем полученные две цепочки.}}Что же делать с вертикальными линиями?* Считаем # Найдем все вертикальным прямые за <tex> H_- </tex>. O(полуплоскости, смотрящие внизN)* Считаем <tex> H_> </tex>. (вертикальные полуплоскостиВозьмем самую правую, у которой нормаль смотрит вправо, и самую левую, смотрящие направо)* Считаем <tex> H_< </tex>у которых нормаль смотрит влево. (вертикальные полуплоскостиПостроим верхнюю цепь и нижнюю цепь без всех вертикальных прямых, затем пересечем верхнюю цепь, нижнюю цепь, смотрящие налево)* Пускаем заметающую самую правую и самую левую вертикальную прямую и получаем пересечение <tex> H_+ \cap H_- \cap H_> \cap H_< </tex>.Стоит уточнить, что каждое из этих множеств может быть пусто. Тогда мы не рассматриваем с ним объединение. Однако # Перейдем в результате мы можем получить пустое множество. Это главное отличние пересечения полуплоскостей и конвекс-халлаоднородное двойственное пространство.
== Источники ==
* http://wwwisg.cs.uni-magdeburg.de/ag/lehre/SS2012/GAG/slides/V12.pdf
* Mark de Berg, Otfried Cheong, Marc van Kreveld, Mark Overmars (2008), Computational Geometry: Algorithms and Applications (3rd edition), Springer-Verlag, ISBN 978-3-540-77973-5 Chapter 11 page 253-254
[[Категория: Вычислительная геометрия]]