Возможный дубликат:
Алгоритм, необходимый для достаточно оптимальной упаковки прямоугольников
У меня есть N прямоугольников, каждый случайного размера (случайная ширина и высота). Все прямоугольники параллельны осям X и Y. Я ищу алгоритм, который поможет мне расположить эти прямоугольники бок о бок таким образом, чтобы результирующий ограничивающий прямоугольник имел минимальную площадь, а потенциальные зазоры вокруг / между входными прямоугольниками были как можно меньше. Прямоугольники нельзя вращать, и они не могут перекрывать друг друга.
(Мне они нужны для автоматизации размещения игровых спрайтов, чтобы я мог создавать листы спрайтов и сохранять местоположения спрайтов из различных изображений, которые я получаю от аниматоров.)
Например:
+---+ +----------+
| 1 | | 2 |
+---+ +----------+ +----------+.. +---+----------+
| 2 |.. | 1 | 2 |
+--------+ ===> +--------+-+-+ vs +---+----+-----+
| | | | 1 | | |......
| 3 | | 3 +---+ | 3 |......
+--------+ +--------+.... +--------+......
Unused: 8 Unused: 18
Неиспользуемое пространство отмечено на чертеже точками (.). Поскольку первый результат имеет ограничивающий прямоугольник с меньшим неиспользуемым пространством, было бы предпочтительнее найти такое расположение входных прямоугольников.
Есть ли уже алгоритм, помогающий в этом? Я много гуглил, но большинство результатов связано с поиском минимального ограничивающего прямоугольника или с тем, чтобы определить, покрывают ли N прямоугольников заранее заданную область.