![]() |
Пересечение Спрайта с определенным цветом Битмапдаты
Здравствуйте, уважаемые флешеры :)
Суть проблемы в следующем.. Есть битмапДата, на которой нарисована какая то клякса (неважно какая, все остальное - прозрачное). Нужно создать круг с рандомными координатами (не находящимися в зоне кляксы) так, чтобы круг касался этой кляксы. Как же вычислить радиус круга?) |
Найти ближайший к центру круга непрозрачный пиксел кляксы. Расстояние от центра до пиксела - радиус.
Искать либо долго, либо сложно (и тоже может оказаться не быстро). Выбирайте =) |
Вот вот) Тупое увеличение радиуса круга, пока он не упрется в кляксу (сканируя все пиксели по окружности с каждым новым радиусом), выдали Ахренеть какие медленные результаты. На создание 20 кругов ушло более 1000 мсек.. Неужели нет других алгоритмов применимых к этой задаче?
|
Описать попиксельно внешнюю границу кляксы, и уже от нее мерить куда воткнуть круг.
|
Для начала не увеличивайте радиус, а ищите минимальное расстояние до центра. Расстояние между точками знаете чему равно? Минимум знаете как искать? Вот этот минимум и будет вашим радиусом, без увеличений всяких.
Если надо много кругов, то можно сначала найти только внешние пикселы кляксы и искать расстояние только для них, но боюсь это уже слишком сложно =\ |
Цитата:
Добавлено через 59 минут В общем, проблему решил, заменив битмапдату с кляксой (которая представляет собой на самом деле много пересекающихся окружностей) массивом спрайтов-окружностей. Нахожу дистанцию между каждым из них и создаваемой окружностью, выбираю минимальную. Получилось довольно шустро.. Но интересно было бы услышать от профессионалов как бы они решили первоначальную задачу :) |
Партизан дело грит - описать вначале внешнюю границу "кляксы". Это вроде не так уж сложно. Вначале найти один крайний пиксел, от него по 7 проверок на пиксел - ткнуться во все стороны, проверить какой из соседних пикселов тоже крайний. Все найденные крайние пикселы в массив. Дальше уже как тов. жаба написал - найти ближайший к центру круга непрозрачный пиксел кляксы и дело в шляпе))
Nicee, порпобуй ради интереса реализовать, какое быстродействие будет у этого варианта)) |
| Часовой пояс GMT +4, время: 01:13. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.