Накрийте увігнутий багатокутник мінімальним числом прямокутників


11

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

Я подумав над тим, щоб спробувати розкласти свій увігнутий багатокутник на трикутники, які створюють набір мінімально перекриваючихся прямокутників, що мінімально обмежують кожен трикутник, а потім об'єднуючи ці прямокутники у більші. Однак я не думаю, що це спрацює для невеликих надрізів у краях багатокутника. Трикутники, створені рефлекторними вершинами на цих вирізах, створюють неправильні прямокутники. Я шукаю прямокутники, які будуть перетинати / ігнорувати виїмки.

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

Я знайшов інші подібні дописи, але не те, що мені потрібно:

Деякі приклади: Чорний - це вхід. Червоний - прийнятний вихід.

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

Ще один приклад: кращий другий вихід. Однак генерування обох результатів та використання іншого фактора для визначення переваг, ймовірно, є необхідним, а не є обов'язком цього алгоритму.

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

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

Полігони, що імітують криві, надзвичайно рідкісні. У цьому сценарії велика частина прямокутників витрачається даремно. Однак це прийнятно, оскільки кожен прямокутник дотримується обмеження максимальної ширини.

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

Крім того, я знайшов цю статтю близькою до того, що мені потрібно:

Можливо, краще питання: "Як я можу визначити прямокутні ділянки увігнутого багатокутника?" введіть тут опис зображення

Ось зображення, яке показує бажану реалізацію: введіть тут опис зображення

Зелений колір - фактичне використання матеріалів. Червоні прямокутники - це макети. Синій колір - MBR всього полігону. Я думаю, що я повинен спробувати отримати невеликі MBR та заповнити їх. 2-3 зелених прямокутника у верхньому лівому куті, які закінчуються в середині багатокутника, дорогі. Саме це я хочу мінімізувати. Зелені прямокутники мають мінімум та максимум ширини та висоти, але я можу використовувати стільки рядків та стовпців, необхідних для покриття регіону. Знову ж таки, я повинен мінімізувати кількість прямокутників, які не перетинаються на вході. Я також можу змінити форму зеленого прямокутника, щоб він помістився в невеликих місцях, що теж дуже дорого. Іншими словами, ідеально підібрати якомога більше прямокутників, щоб прокрутити якомога більше.


3
У вашій назві написано опуклі багатокутники, але питання стосується увігнутих багатокутників. Можливо, вам потрібно внести деякі виправлення?
Анкур

1
@JukkaSuomela, на перших двох знімках багатокутник приблизно однакових розмірів, і на першому малюнку я міг би провести три прямокутники вертикально, як це робив у другій. Однак це менш бажано. Я думаю, що фокус стосується периметрів прямокутників. Можливо, те, що я намагаюся зробити, це звести до мінімуму кількість межі прямокутника, що знаходиться всередині полігону, і максимально збільшити кількість межі, яка є колінеарною по краях багатокутника. Однак іноді прямокутники повинні випливати з багатокутника, щоб повністю його покрити.
Джош К.

1
@JohnMoeller, я розумію. Це проблема, коли людина може легко визначити рішення, але правильно визначити проблему досить складно. Проблема подібна до укладання килимового чи стінового паперу, а фактична проблема є структурною / архітектурною. Я намагаюся визначити області прямокутних макетів, які згодом будуть заповнені іншою формою тесселяції. Пошук цих прямокутників та обробка не прямокутних областей є проблемою. Дайте мені знати, чи можу я пояснити більше.
Джош К.

2
Я думаю, що ми повинні підійти до цього спочатку як до питання моделювання: мета - не створити алгоритм, який вирішує чітко визначену оптимізаційну задачу, а мета - визначити проблему оптимізації.
Jukka Suomela

3
@JoshC: Можливо, це також буде корисно, якби ви спробували розповісти більше про додаток у реальному світі. З вашого опису я розумію, що, наприклад, різання є досить дорогим - в ідеалі прямокутні шматки потребують якомога менше різання. Це правильно?
Jukka Suomela

Відповіді:


3

Це варіант кришки геометричного набору. Залежно від точних налаштувань, ви можете зробити хороше наближення. Проблема, звичайно, NP-Hard. Природними характеристиками є використання жадібного алгоритму (завжди вибирайте прямокутник / смужку, яка охоплює найбільшу область, яка ще не була покрита. Альтернативна методика - використовувати перемотування. Є кілька цікавих теоретичних результатів, але, чесно кажучи, нічого, що не повинно бути занадто корисним на практиці . Одним із цікавих гуеристів, які ви можете спробувати, - спочатку розкласти свій багатокутник на мінімальну кількість опуклих фігур (за допомогою алгоритму динамічного програмування Кіля), а потім охопити кожен опуклий багатокутник окремо ...


Я не знайомий з алгоритмом динамічного програмування Кіля. Однак я знайшов метод роботи, використовуючи комбінацію алгоритмів найбільшого вписаного прямокутника та мінімально обмеженого прямокутника з деякими варіантами, заснованими на евристиці.
Джош Ч.

2

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

Е. Аркін, А. Ефрат, Г. Харт, І. Костіцина, А. Кроллер, Дж. Мітчелл та В. Поліщук. Скандинавські тонкі поверх торта: на найменшій коробці одного розміру. Розваги з алгоритмами . р.16-27. 2012 рік


1
Дякую за пропозицію Я працював з інженерно-виробничими підрозділами моєї компанії, щоб донести більше роз'яснень до цієї проблеми. Я ще чекаю підтвердження, але зараз я думаю, що алгоритм, який повертав би набори найбільших вписаних прямокутників, спрацював би. Хоча вона не повністю покриває форму, вона надала б перевагу ортогнальним областям, залишаючи неортогональні регіони деякою евристикою. Єдина хитрість - максимізувати ці ортогональні регіони. Подивіться моє останнє зображення з 9 фігур, схожих на ламду.
Джош К.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.