Я ищу заполнение произвольной 2D-фигуры прямоугольниками, например, чтобы 2-мерная фигура стала видимой при взгляде на составное изображение прямоугольников.Окончательный результат должен выглядеть аналогично изображениям, созданным этим приложением: http://www.shapecollage.com/ (Нет, я не пытаюсь скопировать указанное приложение, но я хотел бы предложить аналогичную функциональность как часть более крупного приложения).
Я знаю из этого ТАКОГО вопроса, что оптимального решения моей проблемы может не существовать, но достаточно хороший результат должен быть возможным и будет достаточным для моих средств.До сих пор я пробовал следующие два подхода, основанные на идее алгоритма заливки:
Подход 1
- Начните с произвольной точки в форменарисуйте прямоугольник в этой точке.
Отметьте точку справа, снизу, слева и сверху от предыдущего изображения, например, чтобы отмеченные точки соответствовали центру следующего изображения, если оно нарисованобок о бок с предыдущим изображением
// Пример поиска новой x-координаты для правого перемещения
newCenter.x = oldCenter.x + oldWidth + newWidth;
Проверьте, находится ли новая центральная точка а) в 2D-форме и б) не внутри уже нарисованного прямоугольника.Если оба условия выполнены, нарисуйте прямоугольник и продолжайте на шаге 2, иначе ничего не делайте.
Подход 2
То же, что и Подход1, но без условия, что новый центр прямоугольника не должен находиться внутри нарисованного прямоугольника.Вместо этого добавляется отступ во всех направлениях.
// Example of finding new x-coordinate for right move
newCenter.x = oldCenter.x + oldWidth + newWidth + padding;
Оба подхода дают чрезвычайно ограниченные результаты и не могут полностью заполнить форму, хотя иногда части контура становятся видимыми с подходом 1.
Я рад любым откликам, идеям или проверенным методам, которые я мог бы попытаться достичь в результате, аналогичном приведенным выше примерам.Спасибо!