![]() |
|
![]() ![]() ![]() |
|
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Приветствую!
Вот такая задача: есть объекты прямоугольной формы в поле N на M. Нужно сделать из них как-бы плоскогорья. Т.е. обрисовать сначала одной линией (в 1 пиксель) каждый объект, потом еще одной линией и т.д. Каждая линия соответствует высоте, причем чем линия ближе к границе объекта, тем больше высота, которую она определяет. Ниже привел иллюстрацию к заданию. Вот так выглядят объекты: ![]() А вот такую карту надо сделать. Тут более светлый цвет соответствует низкой высоте и наоборот. ![]() Как за более-менее небольшое время создать такую карту? -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 2 Всего: 68 |
neutrino
Оптимизировать преобразование Хафа. |
|||
|
||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 2 Всего: 68 |
Наверное, это я широко шагнул...........
![]() Посмотри тут, правда там про неленейные поверхности, но смысл тот же. Это сообщение отредактировал(а) ~FoX~ - 18.7.2005, 14:27 |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 2 Всего: 68 |
neutrino
Странно.......... ![]() Первая ссылка -
Это сообщение отредактировал(а) ~FoX~ - 18.7.2005, 14:45 |
|||
|
||||
Alex101 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
Мне кажется, все намного проще.
Каждая клетка (с координатами x,y) имеет свою высоту... Соответственно, нужно заполнить двумерный массив. Высоты объектов, как я понимаю, одинаковые (да и необязательно это). Дальше просто - определили точку с необходимой высотой, начинаем от нее "рисовать"... Или я неправильно понял условия? -------------------- С уважением, А. Фролов. |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
~FoX~ Спасибо, но тот алгоритм не очень подходит для моей задачи. До первого поста я его обмозговал и понял, что это самое наивное решение. Дело в том, что я немного переврал с иллюстрацией. Там поля, которые белые тоже имеют разные высоты (в соответствии от расстояния до объектов, естественно). Другими словами, у пузырьков в той статье есть "конец" - это когда цвет полностью переходит в черный и расчет для настоящего пузырька прекращается. У меня же такого конца нет, и поэтому сложность будет как там помножить на кол-во объектов, а это слишком много.
Добавлено @ 17:45 "Конец" = конечный радиус пузырька (приим. авт. ред.) Добавлено @ 17:46 Alex101, мне почему-то кажется, что твоя идея идентична той, что в статье (см. ответ Фокса). Если это так, то см. ответ для Фокса, если нет - поясни свое решение. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
можно применить линейный фильтр
например берем гауссовское распределение (просто оно хорошо выглядит, а вообще можно другое какое-нибудь) дискретизуем его с нужной дискретностью (т.е. вычисляем значения в точке) и применяем этот фильтр... Добавлено @ 18:42 в коде это может выглядеть, например, так:
Это сообщение отредактировал(а) maxim1000 - 19.7.2005, 18:42 -------------------- qqq |
|||
|
||||
Alex101 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
neutrino, а у тебя карта дискретная? (одна клетка - это одна высота?)
В каком виде представлены исходные данные? -------------------- С уважением, А. Фролов. |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Alex101, да.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
Alex101 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
![]() А исходные данные как представлены? -------------------- С уважением, А. Фролов. |
|||
|
||||
Alex101 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
Можно попробовать вот что...
"Зацепляешь" первый объект и начинаешь "обрисовывать" его (при этом другие объекты не трогаешь). "Зацепляешь" следующий объект и делаешь вот что: если поле белое, то, в зависимости от расстояния, закрашиваешь клетку иначе сравниваешь цвет, которым надо закрасить для текущего объекта с уже закрашенным цветом. Если новый цвет "выше", то закрашиваешь, иначе оставляешь. Алгоритм и его реализация зависят от максимальных значений N и M. Это сообщение отредактировал(а) Alex101 - 20.7.2005, 10:14 -------------------- С уважением, А. Фролов. |
|||
|
||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 2 Всего: 68 |
Alex101
Ну вот и прооптимизировали Хафа ![]() Интересно, а объекты именно прямоугольной (правильной) формы? |
|||
|
||||
Alex101 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
Да! При выборе уже второго объекта, как я понимаю, все поле уже будет закрашено. Так что надо сравнивать...
Ну, в этой задаче распознавать ничего не надо, объекты, как я понимаю, заданы однозначно (цветом, допустим). -------------------- С уважением, А. Фролов. |
||||
|
|||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Привет!
Alex101 Боюсь показаться назойливым, но все же: я именно о таком алгоритме и подумал. У него сложность: м*н*(кол-во объектов). Видимо быстрее нельзя... Ладно, вопрос, наверное стоит снять... ~FoX~
Да. maxim1000, извини, но не понял твою идею... -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |