Насколько я понимаю, упаковка мусорных ведер заключается в том, что вы пытаетесь уместить объекты заранее определенного и часто разных размеров в один или несколько контейнеров или «корзин» заранее определенного фиксированного размера. У меня проблема, когда у меня есть один контейнер фиксированного размера и фиксированное количество элементов, которые должны в него поместиться. Разница в том, что мои элементы не имеют фиксированного размера, но их размер может быть увеличен до любого кратного определенного количество. Например:
Допустим, у меня есть 3 объекта или элемента, которые должны идеально поместиться в контейнер размером 280x420, и размеры объектов необходимо изменить до кратных 140.
Следовательно, он мог бы поместиться так: (или перевернуть вертикально)
+----------+----------+
| 140x140 | 140x140 |
| | |
| | |
+----------+----------+
| 280x280 |
| |
| |
| |
| |
+---------------------+
или: (или перевернуть по горизонтали)
+----------+----------+
| 140x210 | 140x420 |
| | |
| | |
| | |
+----------+ |
| 140x210 | |
| | |
| | |
| | |
+----------+----------+
В конце концов, размеры каждого ящика будут динамически определяться на основе статистики. (Например, если один элемент имеет статистику 90%, в то время как два других имеют статистику 2% и 8%, тогда, очевидно, 90% будут иметь больший квадрат.) Однако я стараюсь не усложнять это пока что, поэтому моя главная цель сейчас - просто создать алгоритм для заполнения контейнера.
Я исследовал разные алгоритмы, но еще не придумал идеального способа попробовать это. Есть указатели? Примеры? Существующие математические или другие похожие алгоритмы?
Более сложный пример: 6 предметов, контейнер 560х420. Элемент JSON: { "0": "432", "1": "389", "2": "403", "3": "190", "4": "215", "5": "832" }
Один возможный рендеринг:
+----------+----------+---------------------+
| 140x280 | 140x140 | 280x140 |
| (0,1, | (3 or 4) | (2) |
| or 2) | | |
| | | |
| +----------+---------------------+
| | 140x140 | 280x280 |
| | (3 or 4) | (5) |
| | | |
| | | |
+----------+----------+ |
| 280x210 | |
| (0,1, or 2) | |
| | |
| | |
+---------------------+---------------------+