Заполните 2D-фигуру прямоугольниками - PullRequest
1 голос
/ 11 октября 2011

Я ищу заполнение произвольной 2D-фигуры прямоугольниками, например, чтобы 2-мерная фигура стала видимой при взгляде на составное изображение прямоугольников.Окончательный результат должен выглядеть аналогично изображениям, созданным этим приложением: http://www.shapecollage.com/ (Нет, я не пытаюсь скопировать указанное приложение, но я хотел бы предложить аналогичную функциональность как часть более крупного приложения).

Я знаю из этого ТАКОГО вопроса, что оптимального решения моей проблемы может не существовать, но достаточно хороший результат должен быть возможным и будет достаточным для моих средств.До сих пор я пробовал следующие два подхода, основанные на идее алгоритма заливки:

Подход 1

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

    // Пример поиска новой x-координаты для правого перемещения

    newCenter.x = oldCenter.x + oldWidth + newWidth;

  3. Проверьте, находится ли новая центральная точка а) в 2D-форме и б) не внутри уже нарисованного прямоугольника.Если оба условия выполнены, нарисуйте прямоугольник и продолжайте на шаге 2, иначе ничего не делайте.

Подход 2

То же, что и Подход1, но без условия, что новый центр прямоугольника не должен находиться внутри нарисованного прямоугольника.Вместо этого добавляется отступ во всех направлениях.

// Example of finding new x-coordinate for right move
newCenter.x = oldCenter.x + oldWidth + newWidth + padding;

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

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

Ответы [ 2 ]

0 голосов
/ 11 октября 2011

Попробуйте алгоритм отсечения Вейлера – Атертона;Я использовал это для заполнения многоугольника прямоугольной формы.http://en.wikipedia.org/wiki/Weiler%E2%80%93Atherton_clipping_algorithm

0 голосов
/ 11 октября 2011

Если вам нужно только точно (не идеально) копировать форму, а не цвет, просто поместите свою форму на воображаемую сетку, а затем заполните ее ячейки внутри формы прямоугольниками или изображениями, выбранными случайным образом.Вы можете вращать их тоже, чтобы не было скучно.

...