Сумма Минковского (определение, вычисление)
НЕТ ВОЙНЕ |
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян. Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием. Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей. Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить. Антивоенный комитет России |
Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению. |
meduza.io, Популярная политика, Новая газета, zona.media, Майкл Наки. |
Описание
Определение: |
Суммой Минковского двух множеств | называется множество , где обозначает векторную сумму.
Определение: |
Отрицанием множества | называется множество , где обозначает векторное отрицание.
Теорема: |
Для заданного робота и препятствия , К-препятствием является множество . |
Доказательство: |
Необходимо доказать, что робот пересекает препятствие в том и только в том случае, если .Пусть робот задевает препятствие, и точка В обратную сторону, пусть является точкой пересечения. Тогда, так как , то , или . А заметив, что , получаем . , тогда существуют точки и такие, что или , а это означает, что пересекает . |
Допустим, для простоты, что робот и все препятствия выпуклые, а позже обобщим для невыпуклых фигур.
Теорема: |
Пусть заданы две выпуклые фигуры и , с числом вершин и соответственно. Тогда суммой Минковского является выпуклая фигура с не более чем вершинами. |
Доказательство: |
Для начала заметим, что любая крайняя точка в направлении вектора Теперь рассмотрим произвольное ребро есть сумма крайних точек фигур в этом направлении. Убедиться в этом можно спроецировав обе фигуры на вектор . из . Оно является крайним в направлении к своей нормали, а значит оно образовано крайними точками фигур, и хотя бы у одной из фигур должно быть ребро, которое является крайним в этом направлении. Сопоставим с этим ребром. Тогда сопоставив таким образом всем ребрам ребра исходных фигур, получаем что всего ребер в не более чем , так как каждое ребро исходных фигур использовалось не более раза. |
Псевдокод
i = j = 0 V[n] = V[0], V[n+1] = V[1], W[m] = W[0], W[m+1] = W[1] while i < n or j < m do add V[i]+W[j] to answer if angle(V[i], V[i+1]) < angle(W[j], W[j+1]) ++i else if angle(V[i], V[i+1]) > angle(W[j], W[j+1]) ++j else ++i, ++j
Здесь множества точек
и отсортированы в порядке обхода против часовой стрелки, причем первым элементом в обоих массивах является самая левая нижняя точка множества. Функция angle возвращает значение полярного угла вектора, заданного ее аргументами.Корректность алгоритма следует из доказательства предыдущей теоремы, а время работы равно
, так как на каждой итерации хотя бы один из индексов и увеличивается.Случай невыпуклых фигур
Для начала заметим следующий факт:
В случае, когда одна из фигур невыпукла, её сначала надо затриангулировать, получив
треугольников. После этого, уже известным алгоритмом, надо построить выпуклых фигур с не более чем вершинами, которые будут суммами Минковского соответствующих треугольников. Объединение этих выпуклых фигур будет состоять из вершин.В случае, когда обе фигуры невыпуклы, обе эти фигуры надо затриангулировать, получив
и треугольников соответственно. Построив суммы Минковского множеств этих треугольников получим выпуклых фигур, объединение которых состоит из вершин.Ссылки
- Английская википедия
- de Berg, van Kreveld, Overmars, Schwarzkopf "Computational Geometry Algorithms and Applications", p. 290