Як упакувати багатокутники всередині іншого багатокутника?


20

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

Я можу сканувати шкіряні простирадла та генерувати багатокутник, який наближає форму шкіряного простирадла (як ви знаєте, це шкіра тварин, і вона не йде у прямокутники).

Тож зараз я хотів би максимально збільшити розмір мого жонглювання м'ячем.

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

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

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

Очевидно, що розрізання багатогранної сітки на окремий багатокутник збільшить простір можливої ​​комбінації, а також знизить якість кінцевої геометрії, оскільки тут більше задіяних швів та накопичених помилок. Але це питання не про перерахування різних способів розгортання багатогранника. Їх можна розглядати самостійно. Отже багатокутники - це прості багатокутники.

Формально:

Вхід:

  • П : простий багатокутник (ціль)
  • S : набір багатокутників, які я хочу розмістити
  • n SГ : графік з простих багатокутників - кожен вузол являє собою простий багатокутник у , а між кожною парою багатокутників, які мають спільний край, є один край краю нS
  • α> =0,β> =0 (використання матеріалу та підключення)

Вихід:

  • коефіцієнт масштабуf
  • ГН , підграфГ
  • V ( G )Lоc : розташування та кут для кожного багатокутника вV(Г)
  • міра якості рішення:m = α . f + β . | E ( H ) |мм=α.f+β.|Е(Н)||Е(Г)|

Максимізуйте відповідно до цих умов:м

  • |V(Н)|=|V(Г)| (1)
  • |Е(Н)|<=|Е(Г)| (2)
  • для кожного багатокутника в , масштабований на коефіцієнт у місці знаходиться всередині (3)SiSSifLоc(Si)П
  • багатокутники в не перетинаються (4)V(Н)

(V (G) - вершини на графіку, S - сукупність багатокутників, але вони описують однаковий набір об'єктів. Можливо, є більш компактний спосіб це зробити.)

Пояснення умов:

  • (1) Я хочу, щоб усі багатокутники були в остаточному макеті
  • (2) Деякі з'єднання при необхідності можуть бути розірвані
  • (3) (4) м'яч зроблений зі шкіри

Ось цільовий багатокутник Шкіряний лист

Ось набір багатокутників, які я хочу спакувати: Багатогранна сітка


Ви говорите про опуклі багатокутники, які ви хочете вирізати?
А.Шульц

У моєму випадку багатокутники є регулярними, оскільки вони є гранями платонових твердих тіл. Але упаковка простих багатокутників теж повинна працювати. Чому ви хочете знати, чи багатокутники, які я хочу спакувати, опуклі?
alecail

1
Якщо багатокутники неопуклі, ви завжди можете розмістити один неопуклий багатокутник всередині початкового багатокутника без розрізу. Тож це питання не мало б сенсу для загальних багатокутників.
А.Шульц

Я не знаю, важливо це чи ні, але обмежуючий багатокутник (шкіра) опуклий або він також може бути увігнутим?
Пареш

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

Відповіді:


3

Це належить до класу оптимізації проблем, який називається Проблеми з упаковкою . У вашому випадку замість звичайного багатокутника як контейнера ви отримали нерегулярний, але ідея залишається такою ж.
Ці проблеми з оптимізацією, як правило, важкі для NP, тому я не думаю, що існує простий спосіб знайти точне рішення, і спробувати всі комбінації було б занадто дорого.
Є такі люди, які цікавляться подібними проблемами; Я знайшов це посилання на деякі вирішені конкретні проблеми з упаковкою: http://www2.stetson.edu/~efriedma/packing.html

Найпростіший спосіб, який я бачу, - це визначити приблизний центр шкіряного аркуша, перемістити набір багатокутників туди і, масштабуючи вгору та вниз і перевіряючи, чи є набір багатокутників всередині цільового багатокутника чи ні, щоб отримати все ближче і ближче масштабний коефіцієнт 'f' для потрібного набору багатокутників.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.