![]() |
|
![]() ![]() ![]() |
|
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 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
ну представим, что вместо каждой точки у нас холмик можно посмотреть на этот процесс и так: 1. представляем рисунок в виде суммы "единичных" рисунков - т.е. имеющих только одну закрашенную точку 2. заменяем в каждом рисунке эту закрашенную точку на тот самых холмик 3. в качестве результата берем сумму таких измененных рисунков а вообще - это обычная цифровая фильтрация, только в 2d попробуй поискать - в Интернете наверняка найдется у Alex101'а, насколько я понял то же самое, только вместо + max...
скорее всего не получится: для определения цвета каждой точки надо знать некоторую информацию обо всех объектах (хотя бы для того, чтобы не принимать их во внимание) -------------------- qqq |
||||
|
|||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 2 Всего: 68 |
Все просто - "чем выше категория, тем меньше вероятность"...... Но ИМХО выйгрышь получиться только при достаточно больших объемах изначальных данных. Добавлено @ 14:02 Ой.....не посмотрел, что вторая страница есть ![]() |
|||
|
||||
Alex101 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
Не, скорее всего, N*M*V (V - количество градаций высот). Какая идея... Текущий цвет - (черный-1). Цвет точки - черный. Делаем цикл по высоте (от большей к меньшей). Видим точку и, если можно, то закрашиваем соседние с ней текущим цветом. Меняем цвет точки (текущий). Это сообщение отредактировал(а) Alex101 - 20.7.2005, 14:41 -------------------- С уважением, А. Фролов. |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Спасибо всем участникам дисскуссии. Я немного подумаю, потом скажу, что сделаю.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 1 Всего: 146 |
А не проще будет , отдельно посчитать высоты для каждого холмика, а потом сложит все холмики на одном поле???
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Alex101 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
Нет, по сравнению с моей идеей сложнее. -------------------- С уважением, А. Фролов. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |