Пересечение полуплоскостей, связь с выпуклыми оболочками
Версия от 19:52, 8 апреля 2014; Igorjan94 (обсуждение | вклад)
Задача: есть конечное множество полуплоскотей, найти фигуру их пересечения или сообщить что оно пусто.
Для начала заметим, что если пересечение не пусто, то оно выпукло. (Доказательство — Пересечение выпуклых фигур выпукло, а полуплоскоть выпукла)
Пусть у нас прямые заданы уравнениями вида
. Тогда предикат(см. рисунок) проверки того, что прямая лежит над пересечением прямых и будет равен .Докажем это. Для проверки предиката нам надо определить знак выражения
, где — точка пересечения прямых и . Эту точку можно найти из уравнения . Решением будет . Подставим его в и домножим на определитель.
Таким образом если представить прямую обходе Грэхема для нахождения выпуклой оболочки.
как точку с координатами , где — однородная координата, то этот предикат — всего лишь поворот, а проверка предиката — проверка очередной точки вАлгоритм:
- Отсортировать все полуплоскости по углу наклона;
- Запустить обход Грэхема для полуплоскостей, смотрящих вниз (с предикатом-определителем);
- То же самое для смотрящих вверх;
- Пересечь две цепочки.
От пересечения цепочек напрямую зависит фигура пересечения: неограниченная область получается если одна из цепочек пуста, а ограниченная — когда обе цепочки не пусты и пересекаются.
Источники
- 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
- http://wwwisg.cs.uni-magdeburg.de/ag/lehre/SS2012/GAG/slides/V12.pdf