Ninazu
@Ninazu

Как найти оптимальное расположение объектов в контейнере?

Не знаю как правильно сформулировать запрос для такой задачи. Есть фигура в двухмерном пространстве, произвольной неправильной формы, и есть произвольные фигуры которыми нужно максимально заполнить эту площадь, с минимальным остатком свободного места. Притом часть фигур являются обязательными, а остаток пространства заполнить необязательными по максимуму. Все фигуры хоть и имеют произвольную форму, но они интегральны, и кратны пикселям. Такой себе тетрис. Что-то готовое уже должно однозначно быть, ведь задача тривиальна и изобретать велосипед не нужно. Может какие-то швеи используют что-то такое чтоб раскроить полотно с минимальным количеством остатка. Буду признателен за кусок кода на любой языке программирования или готовую библиотеку

5dfbf571e1c07895645232.png

На входе задается
1. Форма контейнера
2. Формы всех возможных фигур
3. Обязательные фигуры и количество их необходимых копий в контейнере

На выходе получаем
1. Оптимальное расположение всех фигур

Что-то вроде такого условия
<?php

//Последовательности пикселей
//Отрицательные числа - последовательность пустых пикселей
$input = [
	[3],
	[4],
	[4],
	[4],
	[2],
	[2],
];

$figures = [
	"a" => [[2], [2]],          //Куб
	"b" => [[1], [1], [2]],     //L
	"c" => [[-1, 1], [2]],      //J
	"d" => [[4]],               //Линия
	"e" => [[-1, 1], [1]],
];

//Обязательные фигуры, с количеством
$require = [
	"a" => 1,   
	"d" => 1,
];

//Фигуры которые используеются для остаточного заполнения
$optional = [
	"a", "b", "c",
];

//Поиск
function search($input, $figures, $require, $optional) {

	//TODO Магия

	return [
		["b", 0, 0],
		["a", 1, 0],
		["c", 3, 1],
		["d", 0, 3],
		["a", 0, 4],
	];
}

print_r(search($input, $figures, $require, $optional));
  • Вопрос задан
  • 781 просмотр
Решения вопроса 1
Ninazu
@Ninazu Автор вопроса
SVG генерирую программно сам, а потом просто скармливаю на просчет этой прелести
https://deepnest.io/
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Fit (на JS: поиграться), максимально оптимален, т.к. он подбирает через ИИ, и если подобрать оптимальные входные настройки, то можно получить крайне хороший результат.

Также, поищите вот так.
Ответ написан
tul6skiu
@tul6skiu
Fibbonacci
Могу скинуть реализацию на Си для этой задачи? Алгоритм NP есть еще возможность с помощью алгоритма танцующих звеньев - будет быстрей
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы