Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Расчет кусочков при разрезании изображения (http://www.flasher.ru/forum/showthread.php?t=169114)

Genm 27.09.2011 19:43

Расчет кусочков при разрезании изображения
 
Необходимо разрезать картинку на множество кусочков произвольными горизонтальными и вертикальными линиями. Затем создать отдельную картинку из каждого кусочка.

Все бы ничего, но линии например горизонтальные могут пересекаться с другими горизонтальными линиями и наоборот. В результате, очень сложно расчитать каждый отдельный кусочек.

Есть ли у кого рецепты для решения данной задачи?

goodguy 27.09.2011 19:46

Цитата:

но линии например горизонтальные могут пересекаться с другими горизонтальными линиями и наоборот
Это как? Они должны быть не параллельными чтоли?

Genm 27.09.2011 19:47

Линии не параллельные, но прямые.

wvxvw 27.09.2011 20:06

Смешной способ - создайте картинку с "шумом" и найдите в ней координаты всех пикселов определенного цвета :) Дальше, можно будет из всех полученых точек насоздавать треугольников, ну а из них, уже и более сложные фигуры, если нужно.
Другой вариант - граф, у вас будет функция генерирующая фигуру с заданым количеством узлов, вы ей передаете координаты уже существующих объектов, а она добавляет еще один.
Еще вариант: создаете "двумерный" массив, заполняете его точками, точки рандомально сдвигаете.
Еще вариант: создаете произвольное количество прямых, и используя такой алгоритм находите все точки пересечения.

mikhailk 27.09.2011 20:23

А я бы так сделал.

Сначала получил бы семейство-1 фигур из начальной фигуры путем распила вертикальными линиями.
Потом - семейство-2 фигур после распила горизонтальными линиями. Потом в цикле попарно совместил бы каждую фигуру из семейства-1 с фигурой из семейства-2 и нашел бы их пересечение.

Все такие пересечения в сумме и дадут все части исходной картинки.

flax4Noob 28.09.2011 01:37

Занятно) а я бы делал функцию "деление картинки на две части" и гонял ее, пока куски не окажутся нужного размера. Складывая результаты в массив. Ну и бегая по массиву этому функцией. Делить картинку пополам линией под произвольным углом достаточно просто ИМХО. Цикл while вполне примитивен. Ну а в качестве условия можно взять, скажем, ее площадь, округленную до квадрата. Конечно, картинка получится порезанной не прямыми линиями (как в задаче) Но от этого пазл будет еще яростнее. А вот вапрос-в АС3 разве есть возможность скопировать битмап не прямоугольной формы?

mikhailk 28.09.2011 10:23

1. Попиксельно
2. Через маску той самой "не прямоугольной" формы

Genm 28.09.2011 11:32

Попробую сделать так:
-Рассчитаю все точки пересечения отрезков. По данному алгоритму 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
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.