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

11

Я пытаюсь покрыть простой вогнутый многоугольник с минимумом прямоугольников. Мои прямоугольники могут быть любой длины, но они имеют максимальную ширину, и у многоугольника никогда не будет острого угла.

Я думал о попытке разложить мой вогнутый многоугольник на треугольники, которые создают набор минимально перекрывающихся прямоугольников, минимально ограничивающих каждый треугольник, а затем объединяют эти прямоугольники в более крупные. Тем не менее, я не думаю, что это будет работать для небольших надрезов по краям многоугольника. Треугольники, созданные рефлекторными вершинами на этих выемках, создадут неправильные прямоугольники. Я ищу прямоугольники, которые будут охватывать / игнорировать выемки.

Я действительно ничего не знаю о вычислительной геометрии, поэтому я не совсем уверен, как начать задавать вопрос.

Я нашел другие посты, которые были похожи, но не то, что мне нужно:

Несколько примеров: черный - вход. Красный - приемлемый результат.

введите описание изображения здесь

Еще один пример: второй выход является предпочтительным. Тем не менее, генерация обоих выходов и использование другого фактора для определения предпочтения, вероятно, необходимы и не являются обязанностью этого алгоритма.

введите описание изображения здесь

введите описание изображения здесь

Полигоны, имитирующие кривые, встречаются крайне редко. В этом сценарии большая часть площади прямоугольников теряется. Однако это приемлемо, потому что каждый прямоугольник подчиняется ограничению максимальной ширины.

введите описание изображения здесь

Кроме того, я обнаружил, что эта статья близка к тому, что мне нужно:

Может быть, лучше спросить: «Как я могу идентифицировать прямоугольные части вогнутого многоугольника?» введите описание изображения здесь

Вот изображение, показывающее желаемую реализацию: введите описание изображения здесь

Зеленый - фактическое использование материала. Красные прямоугольники - это макеты. Синий - это MBR всего многоугольника. Я думаю, что я должен попытаться получить маленькие MBR и заполнить их. 2-3 зеленых прямоугольника в верхнем левом углу, которые заканчиваются в середине многоугольника, дороги. Это то, что я хочу минимизировать. Зеленые прямоугольники имеют минимальную и максимальную ширину и высоту, но я могу использовать столько строк и столбцов, сколько необходимо для покрытия области. Опять же, я должен минимизировать количество прямоугольников, которые не охватывают входные данные. Я также могу изменить форму зеленого прямоугольника, чтобы он подходил для небольших мест, что также очень дорого. Другими словами, идеальное получение максимально возможного количества прямоугольников.

Джош С.
источник
3
Ваше название говорит о выпуклых многоугольниках, но вопрос говорит о вогнутых многоугольниках. Возможно, вам нужно внести некоторые исправления?
Анкур
1
@JukkaSuomela, на первых двух рисунках многоугольник примерно одинакового размера, и на первом изображении я мог бы провести три прямоугольника по вертикали, как на втором. Однако это менее желательно. Я думаю, что хитрость связана с периметром прямоугольников. Возможно, я пытаюсь минимизировать количество границ прямоугольника внутри многоугольника и максимизировать количество границ, коллинеарных с краями многоугольника. Однако иногда прямоугольники должны выплескиваться из многоугольника, чтобы полностью покрыть его.
Джош К.
1
@JohnMoeller, я понимаю. Это проблема, когда человек может легко найти решение, но правильно сформулировать проблему довольно сложно. Эта проблема похожа на укладку ковров или обоев, а фактическая проблема носит структурный / архитектурный характер. Я пытаюсь определить области прямоугольных макетов, которые позже будут заполнены другой формой тесселяции. Поиск этих прямоугольников и обработка непрямоугольных областей - проблема. Дайте мне знать, если я могу объяснить больше.
Джош К.
2
Я думаю, что мы должны сначала подойти к этому как к вопросу моделирования: цель не состоит в том, чтобы придумать алгоритм, который решает четко определенную проблему оптимизации, но цель состоит в том, чтобы определить проблему оптимизации.
Юкка Суомела
3
@JoshC .: Возможно, было бы также полезно, если бы вы попытались рассказать нам больше о реальном приложении. Из вашего описания я понимаю, что, например, резка довольно дорогая - в идеале, прямоугольные куски требуют как можно меньше резки. Это верно?
Юкка Суомела

Ответы:

3

Это вариант геометрического набора обложки. В зависимости от точных настроек, вы можете сделать хорошее приближение. Проблема, конечно, NP-Hard. Естественный прием состоит в том, чтобы использовать жадный алгоритм (всегда выбирайте прямоугольник / полосу, которая покрывает большую часть еще не покрытой области. Альтернативный метод заключается в использовании повторного взвешивания. Есть некоторые интересные теоретические результаты, но, честно говоря, ничего, что не должно быть слишком полезным на практике Один интересный улов, который вы, возможно, захотите попробовать, - это сначала разложить ваш многоугольник на минимальное количество выпуклых фигур (используя алгоритм динамического программирования Keil), а затем покрыть каждый выпуклый многоугольник отдельно ...

Сариэль Хар-Пелед
источник
Я не знаком с алгоритмом динамического программирования Keil. Однако я нашел способ работать с использованием комбинации алгоритмов с наибольшим вписанным прямоугольником и минимально ограниченным прямоугольником с некоторыми вариантами, основанными на эвристике.
Джош К.
2

Я думаю, что эта статья может помочь. Очевидно, что это не та же проблема - на самом деле это обратная проблема, покрывающая прямоугольник многоугольниками, - но некоторые идеи могут быть отправной точкой. В частности, эта обратная проблема является NP-сложной, и я подозреваю, что ваша проблема также может быть (хотя, насколько я могу судить, очевидного расширения сокращения нет).

Э. Аркин, А. Эфрат, Г. Харт, И. Костицына, А. Кроллер, Дж. Митчелл и В. Полищук. Скандинавские тонкие блюда на верхней части торта: на самой маленькой универсальной коробке. Веселье с алгоритмами . pg.16-27. 2012

Samm
источник
1
Спасибо за ваше предложение. Я работал с инжиниринговыми и производственными отделами в моей компании, чтобы прояснить эту проблему. Я все еще жду подтверждения, но сейчас я думаю, что алгоритм, который будет возвращать наборы самых больших вписанных прямоугольников, будет работать. Хотя он не полностью покрывает форму, он будет отдавать предпочтение ортогональным областям, оставляя неортогональные области некоторой эвристике. Единственная хитрость - максимизировать эти ортогональные области. Смотрите мое последнее изображение с 9 лямдоподобными фигурами.
Джош С.