Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Физическая карта". обрисовка линий высоты. 
:(
    Опции темы
neutrino
Дата 18.7.2005, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Приветствую!

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

Вот так выглядят объекты:

--Resize_Images_Alt_Text--

А вот такую карту надо сделать. Тут более светлый цвет соответствует низкой высоте и наоборот.

--Resize_Images_Alt_Text--

Как за более-менее небольшое время создать такую карту?


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
~FoX~
Дата 18.7.2005, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



neutrino
Оптимизировать преобразование Хафа.


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
~FoX~
Дата 18.7.2005, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



Наверное, это я широко шагнул........... smile
Посмотри тут, правда там про неленейные поверхности, но смысл тот же.

Это сообщение отредактировал(а) ~FoX~ - 18.7.2005, 14:27


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
neutrino
Дата 18.7.2005, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Цитата
Посмотри тут,





--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
~FoX~
Дата 18.7.2005, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



neutrino
Странно.......... smile
Первая ссылка -
Цитата
на Арбузе Компьютерные вести онлайн


Это сообщение отредактировал(а) ~FoX~ - 18.7.2005, 14:45


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Alex101
Дата 19.7.2005, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: 1
Всего: 10



Мне кажется, все намного проще.
Каждая клетка (с координатами x,y) имеет свою высоту...
Соответственно, нужно заполнить двумерный массив.
Высоты объектов, как я понимаю, одинаковые (да и необязательно это).
Дальше просто - определили точку с необходимой высотой, начинаем от нее "рисовать"...

Или я неправильно понял условия?


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
neutrino
Дата 19.7.2005, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



~FoX~ Спасибо, но тот алгоритм не очень подходит для моей задачи. До первого поста я его обмозговал и понял, что это самое наивное решение. Дело в том, что я немного переврал с иллюстрацией. Там поля, которые белые тоже имеют разные высоты (в соответствии от расстояния до объектов, естественно). Другими словами, у пузырьков в той статье есть "конец" - это когда цвет полностью переходит в черный и расчет для настоящего пузырька прекращается. У меня же такого конца нет, и поэтому сложность будет как там помножить на кол-во объектов, а это слишком много.
Добавлено @ 17:45
"Конец" = конечный радиус пузырька (приим. авт. ред.)
Добавлено @ 17:46
Alex101, мне почему-то кажется, что твоя идея идентична той, что в статье (см. ответ Фокса). Если это так, то см. ответ для Фокса, если нет - поясни свое решение.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
maxim1000
Дата 19.7.2005, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



можно применить линейный фильтр
например берем гауссовское распределение (просто оно хорошо выглядит, а вообще можно другое какое-нибудь)
дискретизуем его с нужной дискретностью (т.е. вычисляем значения в точке)
и применяем этот фильтр...
Добавлено @ 18:42
в коде это может выглядеть, например, так:
Код

const int XSize=100;
const int YSize=100;
double Gauss(double x,double y)
{
  return exp(-(x*x+y*y)/2);//вообще-то надо еще множитель, чтобы это плотность была, но в нашем случае важна только форма, да и в центре значение не изменится...
}
void Smooth(double **source,double **destination)
//предполагается, что вся память выделена как надо и в destination все нули
{
  for(int sx=0;sx<XSize;sx++)
    for(int sy=0;sy<YSize;sy++)
      for(int dx=0;dx<XSize;dx++)
        for(int dy=0;dy<YSize;dy++)
          destination[dx][dy]+=source[sx][sy]*Gauss(sx-dx,sy-dy);
}


Это сообщение отредактировал(а) maxim1000 - 19.7.2005, 18:42


--------------------
qqq
PM WWW   Вверх
Alex101
Дата 20.7.2005, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: 1
Всего: 10



neutrino, а у тебя карта дискретная? (одна клетка - это одна высота?)
В каком виде представлены исходные данные?


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
neutrino
Дата 20.7.2005, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Alex101, да.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Alex101
Дата 20.7.2005, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: 1
Всего: 10



Цитата(neutrino @ 20.7.2005, 09:49)
да.

smile
А исходные данные как представлены?


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
Alex101
Дата 20.7.2005, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: 1
Всего: 10



Можно попробовать вот что...
"Зацепляешь" первый объект и начинаешь "обрисовывать" его (при этом другие объекты не трогаешь).
"Зацепляешь" следующий объект и делаешь вот что:
если поле белое, то, в зависимости от расстояния, закрашиваешь клетку
иначе сравниваешь цвет, которым надо закрасить для текущего объекта с уже закрашенным цветом.
Если новый цвет "выше", то закрашиваешь, иначе оставляешь.

Алгоритм и его реализация зависят от максимальных значений N и M.

Это сообщение отредактировал(а) Alex101 - 20.7.2005, 10:14


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
~FoX~
Дата 20.7.2005, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



Alex101
Ну вот и прооптимизировали Хафа smile

Интересно, а объекты именно прямоугольной (правильной) формы?




--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Alex101
Дата 20.7.2005, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: 1
Всего: 10



Цитата(Alex101 @ 20.7.2005, 10:12)
если поле белое, то, в зависимости от расстояния, закрашиваешь клетку
иначе сравниваешь цвет, которым надо закрасить для текущего объекта с уже закрашенным цветом.

Да!
При выборе уже второго объекта, как я понимаю, все поле уже будет закрашено.
Так что надо сравнивать...
Цитата
Ну вот и прооптимизировали Хафа

Ну, в этой задаче распознавать ничего не надо, объекты, как я понимаю, заданы однозначно (цветом, допустим).


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
neutrino
Дата 20.7.2005, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Привет!

Alex101
Боюсь показаться назойливым, но все же: я именно о таком алгоритме и подумал. У него сложность: м*н*(кол-во объектов). Видимо быстрее нельзя... Ладно, вопрос, наверное стоит снять...


~FoX~
Цитата
Интересно, а объекты именно прямоугольной (правильной) формы?

Да.

maxim1000, извини, но не понял твою идею...


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
maxim1000
Дата 20.7.2005, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(neutrino @ 20.7.2005, 11:03)
maxim1000, извини, но не понял твою идею...

ну представим, что вместо каждой точки у нас холмик
можно посмотреть на этот процесс и так:
1. представляем рисунок в виде суммы "единичных" рисунков - т.е. имеющих только одну закрашенную точку
2. заменяем в каждом рисунке эту закрашенную точку на тот самых холмик
3. в качестве результата берем сумму таких измененных рисунков
а вообще - это обычная цифровая фильтрация, только в 2d
попробуй поискать - в Интернете наверняка найдется
у Alex101'а, насколько я понял то же самое, только вместо + max...
Цитата
Боюсь показаться назойливым, но все же: я именно о таком алгоритме и подумал. У него сложность: м*н*(кол-во объектов). Видимо быстрее нельзя...

скорее всего не получится: для определения цвета каждой точки надо знать некоторую информацию обо всех объектах (хотя бы для того, чтобы не принимать их во внимание)



--------------------
qqq
PM WWW   Вверх
~FoX~
Дата 20.7.2005, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



Цитата(neutrino @ 20.7.2005, 14:03)
maxim1000, извини, но не понял твою идею...

Все просто - "чем выше категория, тем меньше вероятность"......
Но ИМХО выйгрышь получиться только при достаточно больших объемах изначальных данных.

Добавлено @ 14:02
Ой.....не посмотрел, что вторая страница есть smile


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Alex101
Дата 20.7.2005, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: 1
Всего: 10



Цитата(neutrino @ 20.7.2005, 13:03)
У него сложность: м*н*(кол-во объектов). Видимо быстрее нельзя...

Не, скорее всего, N*M*V (V - количество градаций высот).
Какая идея...

Текущий цвет - (черный-1).
Цвет точки - черный.
Делаем цикл по высоте (от большей к меньшей).
Видим точку и, если можно, то закрашиваем соседние с ней текущим цветом.
Меняем цвет точки (текущий).

Это сообщение отредактировал(а) Alex101 - 20.7.2005, 14:41


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
neutrino
Дата 20.7.2005, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Спасибо всем участникам дисскуссии. Я немного подумаю, потом скажу, что сделаю.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Romikgy
Дата 22.7.2005, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



А не проще будет , отдельно посчитать высоты для каждого холмика, а потом сложит все холмики на одном поле???


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Alex101
Дата 22.7.2005, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: 1
Всего: 10



Цитата(Romikgy @ 22.7.2005, 09:04)
отдельно посчитать высоты для каждого холмика, а потом сложит все холмики на одном поле???

Нет, по сравнению с моей идеей сложнее.


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1209 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.