<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=83.239.4.58&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=83.239.4.58&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/83.239.4.58"/>
		<updated>2026-05-11T01:36:47Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BB%D1%83%D0%BF%D0%BB%D0%BE%D1%81%D0%BA%D0%BE%D1%81%D1%82%D0%B5%D0%B9,_%D1%81%D0%B2%D1%8F%D0%B7%D1%8C_%D1%81_%D0%B2%D1%8B%D0%BF%D1%83%D0%BA%D0%BB%D1%8B%D0%BC%D0%B8_%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B0%D0%BC%D0%B8&amp;diff=74958</id>
		<title>Пересечение полуплоскостей, связь с выпуклыми оболочками</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BB%D1%83%D0%BF%D0%BB%D0%BE%D1%81%D0%BA%D0%BE%D1%81%D1%82%D0%B5%D0%B9,_%D1%81%D0%B2%D1%8F%D0%B7%D1%8C_%D1%81_%D0%B2%D1%8B%D0%BF%D1%83%D0%BA%D0%BB%D1%8B%D0%BC%D0%B8_%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B0%D0%BC%D0%B8&amp;diff=74958"/>
				<updated>2020-07-14T18:14:34Z</updated>
		
		<summary type="html">&lt;p&gt;83.239.4.58: /* Связь пересечения полуплоскостей с выпуклой оболочкой */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:samplesHalfspaces.png|400px|thumb|right|Пересечение существует и выпукло, неограниченно или пусто]]&lt;br /&gt;
&lt;br /&gt;
== Предикат трех прямых ==&lt;br /&gt;
Задача: есть конечное множество полуплоскостей, найти фигуру их пересечения или сообщить что оно пусто.&lt;br /&gt;
&lt;br /&gt;
Для начала заметим, что если пересечение не пусто, то оно выпукло. (Доказательство {{---}} Пересечение выпуклых фигур выпукло, а полуплоскость выпукла)&lt;br /&gt;
&lt;br /&gt;
Пусть полуплоскости заданы уравнениями прямых и ориентацией, с какой стороны от прямой лежит полуплоскость.&lt;br /&gt;
&lt;br /&gt;
Сначала рассмотрим все полуплоскости, которые &amp;quot;смотрят&amp;quot;, то есть ориентированны, вниз. Аналогично можно рассмотреть все полуплоскости, которые ориентированны вверх.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
[[Файл:halfSpaces.png|400px|thumb|right|Нужна ли полуплоскость &amp;lt;tex&amp;gt; l'' &amp;lt;/tex&amp;gt;?]]&lt;br /&gt;
Предикат проверки (см. рисунок) того, что прямая &amp;lt;tex&amp;gt; l'' : A''x + B''y + C'' = 0 &amp;lt;/tex&amp;gt; лежит над пересечением прямых &amp;lt;tex&amp;gt; l : Ax + By + C = 0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; l' : A'x + B'y + C' = 0 &amp;lt;/tex&amp;gt; равен знаку определителя &amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{vmatrix} &lt;br /&gt;
A &amp;amp; B &amp;amp; C \\ &lt;br /&gt;
A' &amp;amp; B' &amp;amp; C' \\ &lt;br /&gt;
A'' &amp;amp; B'' &amp;amp; C'' &lt;br /&gt;
\end{vmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Для проверки предиката нужно определить знак выражения &amp;lt;tex&amp;gt; A''x_0 + B''y_0 + C'' &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; (x_0, y_0) &amp;lt;/tex&amp;gt; {{---}} точка пересечения прямых &amp;lt;tex&amp;gt; l' &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; l &amp;lt;/tex&amp;gt;. Эта точка находится из уравнения &amp;lt;tex&amp;gt; \begin{pmatrix} &lt;br /&gt;
A &amp;amp; B\\ &lt;br /&gt;
A' &amp;amp; B' &lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
x_0\\ &lt;br /&gt;
y_0 &lt;br /&gt;
\end{pmatrix} =&lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
-C\\ &lt;br /&gt;
-C' &lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;. Решением будет &amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
x_0\\ &lt;br /&gt;
y_0 &lt;br /&gt;
\end{pmatrix} =&lt;br /&gt;
\frac{&lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
B' &amp;amp; -B\\ &lt;br /&gt;
-A' &amp;amp; A &lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
-C\\ &lt;br /&gt;
-C' &lt;br /&gt;
\end{pmatrix}}&lt;br /&gt;
{ &lt;br /&gt;
\begin{vmatrix} &lt;br /&gt;
A &amp;amp; B\\ &lt;br /&gt;
A' &amp;amp; B'&lt;br /&gt;
\end{vmatrix}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/tex&amp;gt;. Подставим это решение в &amp;lt;tex&amp;gt; A''x_0 + B''y_0 + C'' &amp;lt;/tex&amp;gt; и домножим на определитель.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A'' \left&amp;lt;(B'; -B);(-C; -C')\right&amp;gt; + B'' \left&amp;lt;(-A'; A);(-C; -C')\right&amp;gt; + C'' \begin{vmatrix} A &amp;amp; B \\ A' &amp;amp; B' \end{vmatrix} =&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
= A'' \begin{vmatrix} B' &amp;amp; B \\ -C' &amp;amp; -C \end{vmatrix} - B'' \begin{vmatrix} A' &amp;amp; A \\ -C' &amp;amp; -C \end{vmatrix} + C'' \begin{vmatrix} A &amp;amp; A' \\ B &amp;amp; B' \end{vmatrix} =&lt;br /&gt;
&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
= A'' \begin{vmatrix} B' &amp;amp; B \\ -C' &amp;amp; -C \end{vmatrix} - B'' \begin{vmatrix} A' &amp;amp; A \\ -C' &amp;amp; -C \end{vmatrix} - C'' \begin{vmatrix} A' &amp;amp; A \\ B' &amp;amp; B \end{vmatrix} &lt;br /&gt;
= \begin{vmatrix} A'' &amp;amp; A' &amp;amp; A \\ B'' &amp;amp; B' &amp;amp; B \\ -C'' &amp;amp; -C' &amp;amp; -C \end{vmatrix} =&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
= \begin{vmatrix} A &amp;amp; B &amp;amp; C \\ A' &amp;amp; B' &amp;amp; C' \\ A'' &amp;amp; B'' &amp;amp; C'' \end{vmatrix} &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Таким образом, если представить прямую &amp;lt;tex&amp;gt; Ax + By + C = 0 &amp;lt;/tex&amp;gt; как точку с однородными координатами &amp;lt;tex&amp;gt; (A, B, C) &amp;lt;/tex&amp;gt;, то этот предикат {{---}} всего лишь поворот, а проверка предиката {{---}} проверка очередной точки в [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull#Алгоритм Грэхема|обходе Грэхема]] для нахождения выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
* Отсортировать все полуплоскости по углу наклона;&lt;br /&gt;
* Запустить обход Грэхема для полуплоскостей, смотрящих вниз (с предикатом-определителем);&lt;br /&gt;
* Запустить обход Грэхема для полуплоскостей, смотрящих вверх;&lt;br /&gt;
* Пересечь две цепочки.&lt;br /&gt;
&lt;br /&gt;
От пересечения цепочек напрямую зависит фигура пересечения: неограниченная область получается если одна из цепочек пуста, а ограниченная {{---}} когда обе цепочки не пусты и пересекаются.&lt;br /&gt;
&lt;br /&gt;
== Связь пересечения полуплоскостей с выпуклой оболочкой ==&lt;br /&gt;
&lt;br /&gt;
{{Лемма &lt;br /&gt;
|id=1&lt;br /&gt;
|statement= Пересечение полуплоскостей может быть получено построением выпуклой оболочки в [[двойственное пространство|двойственном прострастве]] для множества точек, являющихся дуальным преобразованием исходных полуплоскостей&lt;br /&gt;
|proof= &lt;br /&gt;
[[Файл:DualSpaceCH.png ‎  |400px|thumb|right| Множество точек в двойственном пространстве]]&lt;br /&gt;
[[Файл:DualSpaceCH400.png |400px|thumb|right| Множество прямых в исходном пространстве]]&lt;br /&gt;
&lt;br /&gt;
'''Важно:''' Покажем конструктивный алгоритм для множестве полуплоскостей, не содержащих вертикальный полуплоскости. После леммы приведены два рассуждения, позволяющие снять данное ограничение.&lt;br /&gt;
&lt;br /&gt;
'''Важно:''' В картинке перепутаны &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P^\star&amp;lt;/tex&amp;gt;. TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим планарный случай и предположим, что вертикальные и параллельные прямые отсутствуют (в конце приведем два способа решения данной проблемы).&lt;br /&gt;
&lt;br /&gt;
Пусть у нас есть множество ориентированных прямых, каждая из которых задает полуплоскость(направление вектора нормали задаёт нужную полуплоскость).&lt;br /&gt;
Тогда каждую плоскость мы можем превратить в точку в двойственном пространстве: &amp;lt;tex&amp;gt; P(p_x, p_y) \Rightarrow P^\star (p_x  x - p_y)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Далее воспользуемся основными свойствами дуальной трансформации (см. доказательтсво в конспекте о  [[двойственное пространство|двойственном прострастве]]):&lt;br /&gt;
#&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;l^\star&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;p^\star&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; - точка в исходном пространстве, &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; - прямая в исходном пространстве, &amp;lt;tex&amp;gt;l^\star&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;p^\star&amp;lt;/tex&amp;gt; - их дуальное отображение.&lt;br /&gt;
#&amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит &amp;quot;над&amp;quot; &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;l^\star&amp;lt;/tex&amp;gt; лежит &amp;quot;над&amp;quot; &amp;lt;tex&amp;gt;p^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Важно 2:''' &lt;br /&gt;
* &amp;lt;tex&amp;gt;p^\star&amp;lt;/tex&amp;gt; - точка в двойственном пространстве, &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; - линия в исходном,&lt;br /&gt;
* &amp;lt;tex&amp;gt;l^\star&amp;lt;/tex&amp;gt; - прямая в двойственном пространстве, &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; - точка в исходном,&lt;br /&gt;
* Значок &amp;lt;tex&amp;gt;*&amp;lt;/tex&amp;gt; означает, что элемент из двойственного пространства.&lt;br /&gt;
Рассмотрим множество точек(&amp;lt;tex&amp;gt;P^\star&amp;lt;/tex&amp;gt;) в двойственном пространстве и рассмотрим верхнюю часть выпуклой оболочки, построенной на этих точках. Обозначим её за &amp;lt;tex&amp;gt;\mathcal{UH}&amp;lt;/tex&amp;gt;(Upper hull). Далее мы будем работать только с прямыми(в исходном пространстве), у которых вектор нормали направлен вниз, т.е они образовывают верхнюю цепочку.&lt;br /&gt;
По свойству выпуклой оболочки, любое ребро из цепи &amp;lt;tex&amp;gt;\mathcal{UH}&amp;lt;/tex&amp;gt; содержит &amp;quot;ниже&amp;quot; себя все точки множества &amp;lt;tex&amp;gt;P^\star&amp;lt;/tex&amp;gt;, а так же эта цепь соединяет самую правую точку с самой левой.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим какую-то точку &amp;lt;tex&amp;gt;p^\star \in P^\star&amp;lt;/tex&amp;gt; и заметим, что она будет принадлежать цепи &amp;lt;tex&amp;gt;\mathcal{UH}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\exists&amp;lt;/tex&amp;gt; прямая &amp;lt;tex&amp;gt;l^\star &amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;p^\star \in l^\star&amp;lt;/tex&amp;gt; и все точки из &amp;lt;tex&amp;gt;P^\star&amp;lt;/tex&amp;gt; лежат ниже &amp;lt;tex&amp;gt;l^\star&amp;lt;/tex&amp;gt; (сейчаc мы жили в двойственном пространстве). В обычном пространстве данный факт эквивалентен следующему:&lt;br /&gt;
 &lt;br /&gt;
*Дуальное отображение точки &amp;lt;tex&amp;gt;p^\star&amp;lt;/tex&amp;gt; в базовое пространство {{---}} прямая &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, которая по ''первому свойству'' содержит точку &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;(в базовом пространстве прямая &amp;lt;tex&amp;gt;p^\star&amp;lt;/tex&amp;gt; перешла в точку &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;).&lt;br /&gt;
*Так как прямая &amp;lt;tex&amp;gt;l^\star&amp;lt;/tex&amp;gt; лежит выше всех точек, то теперь каждая прямая из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; лежит выше точки &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; (по свойству 2).&lt;br /&gt;
&lt;br /&gt;
Итого: у нас есть точка &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; на прямой &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, лежащая ниже всех остальных прямых из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Посмотрим на планарный граф множества(рис.2) прямых. Из факта выше, мы можем понять, что &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; внесла ребро в самый нижний фейс(именно тот, который задаёт часть пересечения полуплоскостей). Обозначим цепочку данного фейса, как &amp;lt;tex&amp;gt;\mathcal{LE}&amp;lt;/tex&amp;gt;. Математически данную цепочку мы можем описать, как минимум из всех линейных функция (заданные прямыми) в &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Так же &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; компонента узлов этой цепочки монотонно возрастает.&lt;br /&gt;
&lt;br /&gt;
Вернемся к &amp;lt;tex&amp;gt;\mathcal{UH}&amp;lt;/tex&amp;gt; и заметим, что при обходе цепи, координата &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; точек  растет. Если же мы будет обходить цепочку из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, образующую пересечение полуплоскостей, мы заметим, что наклон прямых уменьшается. Учитывая этот факт, и то что наклон линии из &amp;lt;tex&amp;gt;\mathcal{LE}&amp;lt;/tex&amp;gt; совпадет с &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;  координатой точки (вспоминаем отображение и применяем производную), можно сделать вывод, что обход слева направо точек из цепи &amp;lt;tex&amp;gt;\mathcal{UH}&amp;lt;/tex&amp;gt;, совпадает с обходом точек из &amp;lt;tex&amp;gt;\mathcal{LE}&amp;lt;/tex&amp;gt; справа налево. &lt;br /&gt;
&lt;br /&gt;
(Обе линии монотоны, одна возрастает, другая убывает. Количество точек в массиве одинаковое, при это каждая точка из &amp;lt;tex&amp;gt;\mathcal{UH}&amp;lt;/tex&amp;gt; внесла вклад в &amp;lt;tex&amp;gt;\mathcal{LE}&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Напоследок, cоседние точки &amp;lt;tex&amp;gt;p^\star&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q^\star&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;P^\star&amp;lt;/tex&amp;gt; образуют какое-то или принадлежат какому-то ребру &amp;lt;tex&amp;gt;\mathcal{UH}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; все точки из &amp;lt;tex&amp;gt;P^\star&amp;lt;/tex&amp;gt; лежат &amp;quot;ниже&amp;quot; линии, построенной на точках &amp;lt;tex&amp;gt;p^\star&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q^\star&amp;lt;/tex&amp;gt;. В исходном пространстве это означает: все прямые из пространства &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; за исключением прямых &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежат над пересечением &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Это достаточное условие, что пересечение &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\mathcal{LE}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом мы построили верхнее пересечение полуплоскостей. Аналогичным образом строится нижнее, затем мы пересекаем полученные две цепочки.&lt;br /&gt;
}}&lt;br /&gt;
Что же делать с вертикальными линиями?&lt;br /&gt;
# Найдем все вертикальным прямые за &amp;lt;tex&amp;gt;O(N)&amp;lt;/tex&amp;gt;. Возьмем самую правую, у которой нормаль смотрит вправо, и самую левую, у которых нормаль смотрит влево. Построим верхнюю цепь и нижнюю цепь без всех вертикальных прямых, затем пересечем верхнюю цепь, нижнюю цепь, самую правую и самую левую вертикальную прямую.&lt;br /&gt;
# Перейдем в однородное двойственное пространство.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* http://wwwisg.cs.uni-magdeburg.de/ag/lehre/SS2012/GAG/slides/V12.pdf&lt;br /&gt;
* 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&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>83.239.4.58</name></author>	</entry>

	</feed>