Расчет кусочков при разрезании изображения
Необходимо разрезать картинку на множество кусочков произвольными горизонтальными и вертикальными линиями. Затем создать отдельную картинку из каждого кусочка.
Все бы ничего, но линии например горизонтальные могут пересекаться с другими горизонтальными линиями и наоборот. В результате, очень сложно расчитать каждый отдельный кусочек. Есть ли у кого рецепты для решения данной задачи? |
Цитата:
|
Линии не параллельные, но прямые.
|
Смешной способ - создайте картинку с "шумом" и найдите в ней координаты всех пикселов определенного цвета :) Дальше, можно будет из всех полученых точек насоздавать треугольников, ну а из них, уже и более сложные фигуры, если нужно.
Другой вариант - граф, у вас будет функция генерирующая фигуру с заданым количеством узлов, вы ей передаете координаты уже существующих объектов, а она добавляет еще один. Еще вариант: создаете "двумерный" массив, заполняете его точками, точки рандомально сдвигаете. Еще вариант: создаете произвольное количество прямых, и используя такой алгоритм находите все точки пересечения. |
А я бы так сделал.
Сначала получил бы семейство-1 фигур из начальной фигуры путем распила вертикальными линиями. Потом - семейство-2 фигур после распила горизонтальными линиями. Потом в цикле попарно совместил бы каждую фигуру из семейства-1 с фигурой из семейства-2 и нашел бы их пересечение. Все такие пересечения в сумме и дадут все части исходной картинки. |
Занятно) а я бы делал функцию "деление картинки на две части" и гонял ее, пока куски не окажутся нужного размера. Складывая результаты в массив. Ну и бегая по массиву этому функцией. Делить картинку пополам линией под произвольным углом достаточно просто ИМХО. Цикл while вполне примитивен. Ну а в качестве условия можно взять, скажем, ее площадь, округленную до квадрата. Конечно, картинка получится порезанной не прямыми линиями (как в задаче) Но от этого пазл будет еще яростнее. А вот вапрос-в АС3 разве есть возможность скопировать битмап не прямоугольной формы?
|
1. Попиксельно
2. Через маску той самой "не прямоугольной" формы |
Попробую сделать так:
-Рассчитаю все точки пересечения отрезков. По данному алгоритму http://algolist.manual.ru/maths/geom...lineline2d.php -Отсортирую точки по общему весу (х+у) и по х -У каждой точки будет свой х и у, массив ближайших точек и количество фигур которым может принадлежать точка Затем буду брать в цикле: - меньшую по весу точку -из ее массива ближайших точек меньшую по весу точку -от этой точки буду рассчитывать путь к начальной точке -после завершения расчета пути уменьшаю фигуры в использованных точках. Если количество фигур равно нулю, то ставить запрет на использование точки в дальнейших расчетах. И так пока все точки не закрою… |
Часовой пояс GMT +4, время: 13:02. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.