Jump to content

Выпуклая оболочка простого многоугольника

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

В дискретной геометрии и вычислительной геометрии выпуклая оболочка простого многоугольника — это многоугольник минимального периметра, содержащий заданный простой многоугольник . Это частный случай более общего понятия выпуклой оболочки . Его можно вычислить за линейное время , быстрее, чем алгоритмы для выпуклых оболочек наборов точек .

Выпуклую оболочку простого многоугольника можно разделить на сам данный многоугольник и на многоугольные карманы , ограниченные ломаной цепочкой многоугольника вместе с одним ребром выпуклой оболочки. Многократное отражение произвольно выбранного кармана через этот выпуклый край оболочки создает последовательность более крупных простых многоугольников; согласно теореме Эрдеша-Надя , этот процесс в конечном итоге заканчивается выпуклым многоугольником.

Структура

[ редактировать ]

Выпуклая оболочка простого многоугольника сама по себе является выпуклым многоугольником . Наложение исходного простого многоугольника на его выпуклую оболочку разбивает этот выпуклый многоугольник на области, одна из которых является исходным многоугольником. Остальные регионы называются карманами . Каждый карман сам по себе является простым многоугольником, ограниченным полигональной цепочкой на границе данного простого многоугольника и одним краем выпуклой оболочки. У уже выпуклого многоугольника карманов нет. [1]

Можно сформировать иерархическое описание любого заданного многоугольника, построив таким образом его оболочку и карманы, а затем рекурсивно сформировав однотипную иерархию для каждого кармана. [1] Эту структуру, называемую выпуклым деревом разностей , можно эффективно построить. [2]

Алгоритмы

[ редактировать ]

Нахождение выпуклой оболочки простого многоугольника можно выполнить за линейное время . Несколько ранних публикаций по этой проблеме оказались неверными, часто потому, что они приводили к промежуточным состояниям с пересечениями, приводившими к их разрушению. Первый правильный алгоритм с линейным временем для этой задачи был предложен МакКаллумом и Ависом (1979) . [3] Даже после его публикации продолжали публиковаться другие неверные алгоритмы. [4] Brönnimann & Chan (2006) пишут, что большинство опубликованных алгоритмов решения этой проблемы неверны. [5] хотя в более поздней истории, собранной Грегом Алуписом, только семь из пятнадцати алгоритмов указаны как неправильные. [6]

Особенно простой алгоритм решения этой задачи был опубликован Грэмом и Яо (1983) и Ли (1983) . Как и алгоритм сканирования Грэма для выпуклых оболочек наборов точек, он основан на стековой структуре данных . Алгоритм обходит многоугольник по часовой стрелке, начиная с вершины, которая, как известно, находится на выпуклой оболочке (например, ее крайней левой точки). При этом он сохраняет в стеке выпуклую последовательность вершин, тех, которые еще не были идентифицированы как находящиеся внутри карманов. Точки в этой последовательности — это вершины выпуклого многоугольника (не обязательно оболочка всех вершин, замеченных до сих пор), к некоторым из его краев могут быть прикреплены карманы. На каждом шаге алгоритм следует по пути вдоль многоугольника от вершины стека до следующей вершины, которая не находится ни в одном из двух карманов, соседних с вершиной стека. Затем, хотя две верхние вершины стека вместе с этой новой вершиной не находятся в выпуклом положении, он извлекает стек, прежде чем окончательно поместить новую вершину в стек. Когда обход по часовой стрелке достигает начальной точки, алгоритм завершается, и стек содержит вершины выпуклой оболочки в порядке по часовой стрелке. На каждом этапе алгоритма вершина либо помещается в стек, либо извлекается из стека, причем каждая вершина помещается и извлекается не более одного раза, поэтому общее время работы алгоритма является линейным. [7] [8] Если входные вершины заданы в массиве по часовой стрелке, то выходные данные можно вернуть в том же массиве, используя только постоянное количество дополнительных переменных в качестве промежуточного хранилища. [5]

Подобный метод можно использовать и для построения выпуклых оболочек кусочно-гладких замкнутых кривых на плоскости. [9] Используя дек вместо стека, аналогичный алгоритм можно обобщить на выпуклую оболочку любой многоугольной цепи, а алгоритм для простых многоугольников можно запустить в любой вершине многоугольника, вместо того, чтобы требовать крайнюю вершину в качестве начальной вершины. . [10]

Откидные карманы

[ редактировать ]

Переворот . кармана создает новый многоугольник из заданного путем отражения многоугольной цепи, ограничивающей карман, через выпуклый край оболочки кармана При каждом перевороте создается еще один простой многоугольник с равным периметром и большей площадью, хотя несколько одновременных переворотов могут привести к появлению пересечений. Если перевернуть произвольно выбранный карман и затем повторить этот процесс с карманами каждого последовательно сформированного многоугольника, получится последовательность простых многоугольников. Согласно теореме Эрдеша-Надя , этот процесс переворачивания в конечном итоге завершается, достигая выпуклого многоугольника. Как и проблема построения выпуклой оболочки, эта проблема имеет долгую историю неверных доказательств. [11]

  1. ^ Jump up to: а б Тор, СБ; Миддлдич, AE (1984), «Выпуклое разложение простых многоугольников», ACM Transactions on Graphics , 3 (4): 244–265, doi : 10.1145/357346.357348
  2. ^ Раппопорт, Ари (1992), «Эффективный адаптивный алгоритм построения дерева выпуклых разностей простого многоугольника», Computer Graphics Forum , 11 (4): 235–240, doi : 10.1111/1467-8659.1140235 , S2CID   20137707
  3. ^ МакКаллум, Дункан; Авис, Дэвид (1979), «Линейный алгоритм поиска выпуклой оболочки простого многоугольника», Information Processing Letters , 9 (5): 201–206, doi : 10.1016/0020-0190(79)90069-3 , MR   0552534
  4. ^ Туссен, Годфрид (1991), «Контрпример к алгоритму выпуклой оболочки для многоугольников», Распознавание образов , 24 (2): 183–184, Бибкод : 1991PatRe..24..183T , doi : 10.1016/0031-3203 (91)90087-Л , МР   1087740
  5. ^ Jump up to: а б Брённиманн, Эрве; Чан, Тимоти М. (2006), «Эффективные с точки зрения использования пространства алгоритмы для вычисления выпуклой оболочки простой ломаной за линейное время», Computational Geometry , 34 (2): 75–82, doi : 10.1016/j.comgeo.2005.11 .005 , МР   2222883
  6. ^ Алупис, Грег, История алгоритмов выпуклой оболочки, работающих в линейном времени для простых многоугольников , Университет Макгилла , получено 1 января 2020 г.
  7. ^ Грэм, Рональд Л .; Яо, Ф. Фрэнсис (1983), «Нахождение выпуклой оболочки простого многоугольника», Journal of Algorithms , 4 (4): 324–331, doi : 10.1016/0196-6774(83)90013-5 , MR   0729228
  8. ^ Ли, Д.Т. (1983), «О поиске выпуклой оболочки простого многоугольника», Международный журнал компьютерных и информационных наук , 12 (2): 87–98, doi : 10.1007/BF00993195 , MR   0724699 , S2CID   28600832
  9. ^ Шеффер, Алехандро А.; Ван Вик, Кристофер Дж. (1987), «Выпуклые оболочки кусочно-гладких жордановых кривых», Журнал алгоритмов , 8 (1): 66–94, doi : 10.1016/0196-6774(87)90028-9 , MR   0875326
  10. ^ Мелькман, Авраам А. (1987), «Онлайн-построение выпуклой оболочки простой ломаной», Information Processing Letters , 25 (1): 11–12, doi : 10.1016/0020-0190(87)90086-X , МР   0896397
  11. ^ Демейн, Эрик Д .; Гассенд, Блез; О'Рурк, Джозеф ; Туссен, Годфрид Т. (2008), «Все многоугольники переворачиваются конечно ... верно?», Обзоры по дискретной и вычислительной геометрии , Современная математика, том. 453, Провиденс, Род-Айленд: Американское математическое общество, стр. 231–255, doi : 10.1090/conm/453/08801 , MR   2405683
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: ec42cc2f2f2e8390d92c95281bb738be__1702883520
URL1:https://arc.ask3.ru/arc/aa/ec/be/ec42cc2f2f2e8390d92c95281bb738be.html
Заголовок, (Title) документа по адресу, URL1:
Convex hull of a simple polygon - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)