Форум 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=146798)

Nicee 18.11.2010 12:39

Пересечение Спрайта с определенным цветом Битмапдаты
 
Здравствуйте, уважаемые флешеры :)

Суть проблемы в следующем.. Есть битмапДата, на которой нарисована какая то клякса (неважно какая, все остальное - прозрачное). Нужно создать круг с рандомными координатами (не находящимися в зоне кляксы) так, чтобы круг касался этой кляксы. Как же вычислить радиус круга?)

-De- 18.11.2010 12:52

Найти ближайший к центру круга непрозрачный пиксел кляксы. Расстояние от центра до пиксела - радиус.
Искать либо долго, либо сложно (и тоже может оказаться не быстро). Выбирайте =)

Nicee 18.11.2010 12:59

Вот вот) Тупое увеличение радиуса круга, пока он не упрется в кляксу (сканируя все пиксели по окружности с каждым новым радиусом), выдали Ахренеть какие медленные результаты. На создание 20 кругов ушло более 1000 мсек.. Неужели нет других алгоритмов применимых к этой задаче?

Партизан 18.11.2010 13:13

Описать попиксельно внешнюю границу кляксы, и уже от нее мерить куда воткнуть круг.

-De- 18.11.2010 13:20

Для начала не увеличивайте радиус, а ищите минимальное расстояние до центра. Расстояние между точками знаете чему равно? Минимум знаете как искать? Вот этот минимум и будет вашим радиусом, без увеличений всяких.
Если надо много кругов, то можно сначала найти только внешние пикселы кляксы и искать расстояние только для них, но боюсь это уже слишком сложно =\

Nicee 18.11.2010 20:21

Цитата:

Расстояние между точками знаете чему равно? Минимум знаете как искать?
Хотелось бы соврать, что знаю, но НЕТ))) Просветите меня пожалуйста :)

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

Nucer 19.11.2010 16:20

Партизан дело грит - описать вначале внешнюю границу "кляксы". Это вроде не так уж сложно. Вначале найти один крайний пиксел, от него по 7 проверок на пиксел - ткнуться во все стороны, проверить какой из соседних пикселов тоже крайний. Все найденные крайние пикселы в массив. Дальше уже как тов. жаба написал - найти ближайший к центру круга непрозрачный пиксел кляксы и дело в шляпе))
Nicee, порпобуй ради интереса реализовать, какое быстродействие будет у этого варианта))


Часовой пояс GMT +4, время: 01:13.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.