Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Генерирование случайного пятна 
:(
    Опции темы
APXEOLOG
Дата 31.5.2011, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброго времени суток. Работаем над генератором карт для tile-based игры. Интересуют алгоритмы генерации пятен (озер) случайной формы. Собственно в общем случае интересует генерация многоугольников (причем они могут быть невыпуклыми и иметь нестандартные пропорции).
--------------------
Ученые долго не знали как назвать частоту.Потом так и назвали Hz.
PM MAIL ICQ   Вверх
_Y_
Дата 2.6.2011, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Если не очень быстрый алгоритм устроит, то я бы сделал так.

На первом этапе создаем пятно с некрасивыми краями.

1) Наносим случайным образом точку на карте. Это зародыш пятна.
2) Обходим пятно по периметру случайным образом добавляя точки.
3) Возврящаемся к п.2 случайное число раз.

На этом этапе важно правильно задать вероятности и критерий выхода из цикла. Можно, например, задать функцию уменьшения вероятности добавления новой точки по мере увеличения счетчика цикла и выходить из цикла если за проход не добавлено ни одной точки. Чем быстрее убывает такая вероятность - тем меньше получится озеро.

Далее - сглаживаем края. Это можно сделать стандартным алгоритмом увеличения-уменьшения пятна. Сначала увеличиваем полученное пятно на N пикселей. Потом уменьшаем на то же число. Края при такой процедуре всегда сглаживаются. Чем больше N, тем глаже результат. Остнова в озере такие операции тоже убирают, если острова не очень большие. К сожалению я не помню названия этих операций увеличения-уменьшения. А книжка нужная на работе. А на работу я попаду в лучшем случае на той неделе.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
1000000dollars
Дата 2.6.2011, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 6.10.2007

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



А натыкать рандомно точек и обойти по ним, исключая некоторые (слишком крутые изгибы) ? Не?
PM MAIL   Вверх
Nostr
Дата 8.6.2011, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 7.6.2011

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



Создается по N точкам правильный многоугольник, затем в нем выбирается пара вершин, которые соединяются прямой, отсекая фигуру. Если выбирать не слишком далекие друг от друга вершины - можно добиться нормальных результатов.
Ну естественно без сглаживания никак
PM MAIL   Вверх
pvl16
Дата 22.6.2011, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 22.6.2011

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



Посмотрите на тему активатор-ингибитор (Meinhardt-Gierer, Тьюринг).
Например: How the Leopard Gets Its Spots
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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