Я намагаюся покрити простий увігнутий багатокутник мінімальними прямокутниками. Мої прямокутники можуть бути будь-якої довжини, але вони мають максимальну ширину, і багатокутник ніколи не матиме гострого кута.
Я подумав над тим, щоб спробувати розкласти свій увігнутий багатокутник на трикутники, які створюють набір мінімально перекриваючихся прямокутників, що мінімально обмежують кожен трикутник, а потім об'єднуючи ці прямокутники у більші. Однак я не думаю, що це спрацює для невеликих надрізів у краях багатокутника. Трикутники, створені рефлекторними вершинами на цих вирізах, створюють неправильні прямокутники. Я шукаю прямокутники, які будуть перетинати / ігнорувати виїмки.
Я насправді нічого не знаю про обчислювальну геометрію, тому я не дуже впевнений, як почати ставити питання.
Я знайшов інші подібні дописи, але не те, що мені потрібно:
- розділити багатокутник на мінімальну кількість прямокутників і трикутників
- Покриття довільного багатокутника з мінімальною кількістю квадратів
- Знайдіть прямокутників так, щоб вони охоплювали максимальну кількість точок
- Алгоритм пошуку найменших прямокутників для покриття набору прямокутників
Деякі приклади: Чорний - це вхід. Червоний - прийнятний вихід.
Ще один приклад: кращий другий вихід. Однак генерування обох результатів та використання іншого фактора для визначення переваг, ймовірно, є необхідним, а не є обов'язком цього алгоритму.
Полігони, що імітують криві, надзвичайно рідкісні. У цьому сценарії велика частина прямокутників витрачається даремно. Однак це прийнятно, оскільки кожен прямокутник дотримується обмеження максимальної ширини.
Крім того, я знайшов цю статтю близькою до того, що мені потрібно:
- Покриття прямокутними фігурами Пола Іакоба, Даніели Марінеску та Крістіни Лука
Можливо, краще питання: "Як я можу визначити прямокутні ділянки увігнутого багатокутника?"
Ось зображення, яке показує бажану реалізацію:
Зелений колір - фактичне використання матеріалів. Червоні прямокутники - це макети. Синій колір - MBR всього полігону. Я думаю, що я повинен спробувати отримати невеликі MBR та заповнити їх. 2-3 зелених прямокутника у верхньому лівому куті, які закінчуються в середині багатокутника, дорогі. Саме це я хочу мінімізувати. Зелені прямокутники мають мінімум та максимум ширини та висоти, але я можу використовувати стільки рядків та стовпців, необхідних для покриття регіону. Знову ж таки, я повинен мінімізувати кількість прямокутників, які не перетинаються на вході. Я також можу змінити форму зеленого прямокутника, щоб він помістився в невеликих місцях, що теж дуже дорого. Іншими словами, ідеально підібрати якомога більше прямокутників, щоб прокрутити якомога більше.