Пересечение полуплоскостей, связь с выпуклыми оболочками

Материал из Викиконспекты
Версия от 22:57, 11 декабря 2016; Krasnotsvetov (обсуждение | вклад) (Связь пересечения полуплоскостей с выпуклой оболочкой)
Перейти к: навигация, поиск
Пересечение существует и выпукло, неограниченно или пусто

Задача: есть конечное множество полуплоскостей, найти фигуру их пересечения или сообщить что оно пусто.

Для начала заметим, что если пересечение не пусто, то оно выпукло. (Доказательство — Пересечение выпуклых фигур выпукло, а полуплоскость выпукла)

Пусть полуплоскости заданы уравнениями прямых и ориентацией, с какой стороны от прямой лежит полуплоскость.

Сначала рассмотрим все полуплоскости, которые "смотрят", то есть ориентированны, вниз. Аналогично можно рассмотреть все полуплоскости, которые ориентированны вверх.

Лемма:
Нужна ли полуплоскость [math] l'' [/math]?
Предикат проверки (см. рисунок) того, что прямая [math] l'' : A''x + B''y + C'' = 0 [/math] лежит над пересечением прямых [math] l : Ax + By + C = 0 [/math] и [math] l' : A'x + B'y + C' = 0 [/math] равен знаку определителя [math] \begin{vmatrix} A & B & C \\ A' & B' & C' \\ A'' & B'' & C'' \end{vmatrix} [/math].
Доказательство:
[math]\triangleright[/math]

Для проверки предиката нужно определить знак выражения [math] A''x_0 + B''y_0 + C'' [/math], где [math] (x_0, y_0) [/math] — точка пересечения прямых [math] l' [/math] и [math] l [/math]. Эта точка находится из уравнения [math] \begin{pmatrix} A & B\\ A' & B' \end{pmatrix} \begin{pmatrix} x_0\\ y_0 \end{pmatrix} = \begin{pmatrix} -C\\ -C' \end{pmatrix} [/math]. Решением будет [math] \begin{pmatrix} x_0\\ y_0 \end{pmatrix} = \frac{ \begin{pmatrix} B' & -B\\ -A' & A \end{pmatrix} \begin{pmatrix} -C\\ -C' \end{pmatrix}} { \begin{vmatrix} A & B\\ A' & B' \end{vmatrix} } [/math]. Подставим это решение в [math] A''x_0 + B''y_0 + C'' [/math] и домножим на определитель.

[math] A'' (B'; -B)(-C; -C') + B'' (-A'; A)(-C; -C') + C'' \begin{vmatrix} A & B \\ A' & B' \end{vmatrix} = 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} = \begin{vmatrix} A & B & C \\ A' & B' & C' \\ A'' & B'' & C'' \end{vmatrix} [/math]
[math]\triangleleft[/math]

Таким образом, если представить прямую [math] Ax + By + C = 0 [/math] как точку с однородными координатами [math] (A, B, C) [/math], то этот предикат — всего лишь поворот, а проверка предиката — проверка очередной точки в обходе Грэхема для нахождения выпуклой оболочки.

Алгоритм:

  • Отсортировать все полуплоскости по углу наклона;
  • Запустить обход Грэхема для полуплоскостей, смотрящих вниз (с предикатом-определителем);
  • Запустить обход Грэхема для полуплоскостей, смотрящих вверх;
  • Пересечь две цепочки.

От пересечения цепочек напрямую зависит фигура пересечения: неограниченная область получается если одна из цепочек пуста, а ограниченная — когда обе цепочки не пусты и пересекаются.

Связь пересечения полуплоскостей с выпуклой оболочкой

Лемма:
Пересечение полуплоскостей может быть получено построением выпуклой оболочки в двойственном прострастве для множества точек, являющихся дуальным преобразованием исходных полуплоскостей
Доказательство:
[math]\triangleright[/math]
Множество точек в двойственном пространстве
Множество прямых в исходном пространстве

Важно: Покажем конструктивный алгоритм для множестве полуплоскостей, не содержащих вертикальный полуплоскости. После леммы приведены два рассуждения, позволяющие снять данное ограничение.

Рассмотрим планарный случай и предположим, что вертикальные и параллельные прямые отсутствуют (в конце приведем два способа решения данной проблемы).

Пусть у нас есть множество ориентированных прямых, каждая из которых задает полуплоскость(направление вектора нормали задаёт нужную полуплоскость). Тогда каждую плоскость мы можем превратить в точку в двойственном пространстве: [math] P(p_x, p_y) \Rightarrow P^\star (p_x x - p_y)[/math].

Далее воспользуемся основными свойствами дуальной трансформации (см. доказательтсво в конспекте о двойственном прострастве):

  1. [math]p[/math] [math]\in[/math] [math]l[/math] [math]\Leftrightarrow[/math] [math]l^\star[/math] [math]\in[/math] [math]p^\star[/math], где [math]p[/math] - точка в исходном пространстве, [math]l[/math] - прямая в исходном пространстве, [math]l^\star[/math], [math]p^\star[/math] - их дуальное отображение.
  2. [math]p[/math] лежит "над" [math]l[/math] [math]\Leftrightarrow[/math] [math]l^\star[/math] лежит "над" [math]p^\star[/math]

Рассмотрим множество точек([math]P^\star[/math]) в двойственном пространстве и рассмотрим верхнюю часть выпуклой оболочки, построенной на этих точках. Обозначим её за [math]\mathcal{UH}[/math](Upper hull). По свойству выпуклой оболочки, любое ребро из цепи [math]\mathcal{UH}[/math] содержит "ниже" себя все точки множества [math]P^\star[/math], а так же эта цепь соединяет самую правую точку с самой левой.

Рассмотрим какую-то точку [math]p^\star \in P^\star[/math] и заметим, что она будет принадлежать цепи [math]\mathcal{UH}[/math] [math]\Leftrightarrow[/math] [math]\exists[/math] прямая [math]l^\star [/math] : [math]p^\star \in l^\star[/math] и все точки из [math]P^\star[/math] лежат ниже [math]l^\star[/math] (сейчаc мы жили в двойственном пространстве). В обычном пространстве данный факт эквивалентен следующему:

  • Дуальное отображение точки [math]l^\star[/math] в базовое пространство — прямая [math]l[/math], которая по первому свойству содержит точку [math]p[/math](в базовом пространстве прямая [math]p^\star[/math] перешла в точку [math]p[/math]).
  • Так как прямая [math]l^\star[/math] лежит выше всех точек, то теперь каждая прямая из [math]P[/math] лежит выше точки [math]l[/math] (по свойству 2).

Итого: у нас есть точка [math]l[/math] на прямой [math]p[/math], лежащая ниже всех остальных прямых из [math]P[/math].

Взглянем на планарный граф множества(рис.2) прямых. Из факта выше, мы можем понять, что [math]p[/math] внесла ребро, которая принадлежит нижней части планарного графа(именно той, что задаёт часть пересечения полуплоскостей).

Вернемся к [math]\mathcal{UH}[/math] и заметим, что при обходе цепи, координата точек Х растет. Если же мы будет обходить цепочку из [math]P[/math], образующую пересечение полуплоскостей, мы заметим, что наклон прямых уменьшается. Учитывая этот факт, и то что наклон линии совпадет с X координатой точки(вспоминаем отображение и применяем производную), можно сделать вывод, что обход слева направо точек из цепи [math]\mathcal{UH}[/math], совпадает с обходом точек из [math]\mathcal{LE}[/math] справа налево.
[math]\triangleleft[/math]

Источники