![]() |
|
![]() ![]() ![]() |
|
APXEOLOG |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.4.2007 Где: Мурманск Репутация: нет Всего: 1 |
Доброго времени суток. Работаем над генератором карт для tile-based игры. Интересуют алгоритмы генерации пятен (озер) случайной формы. Собственно в общем случае интересует генерация многоугольников (причем они могут быть невыпуклыми и иметь нестандартные пропорции).
--------------------
Ученые долго не знали как назвать частоту.Потом так и назвали Hz. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Если не очень быстрый алгоритм устроит, то я бы сделал так.
На первом этапе создаем пятно с некрасивыми краями. 1) Наносим случайным образом точку на карте. Это зародыш пятна. 2) Обходим пятно по периметру случайным образом добавляя точки. 3) Возврящаемся к п.2 случайное число раз. На этом этапе важно правильно задать вероятности и критерий выхода из цикла. Можно, например, задать функцию уменьшения вероятности добавления новой точки по мере увеличения счетчика цикла и выходить из цикла если за проход не добавлено ни одной точки. Чем быстрее убывает такая вероятность - тем меньше получится озеро. Далее - сглаживаем края. Это можно сделать стандартным алгоритмом увеличения-уменьшения пятна. Сначала увеличиваем полученное пятно на N пикселей. Потом уменьшаем на то же число. Края при такой процедуре всегда сглаживаются. Чем больше N, тем глаже результат. Остнова в озере такие операции тоже убирают, если острова не очень большие. К сожалению я не помню названия этих операций увеличения-уменьшения. А книжка нужная на работе. А на работу я попаду в лучшем случае на той неделе. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
1000000dollars |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 6.10.2007 Репутация: 1 Всего: 8 |
А натыкать рандомно точек и обойти по ним, исключая некоторые (слишком крутые изгибы) ? Не?
|
|||
|
||||
Nostr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 7.6.2011 Репутация: нет Всего: нет |
Создается по N точкам правильный многоугольник, затем в нем выбирается пара вершин, которые соединяются прямой, отсекая фигуру. Если выбирать не слишком далекие друг от друга вершины - можно добиться нормальных результатов.
Ну естественно без сглаживания никак |
|||
|
||||
pvl16 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 22.6.2011 Репутация: нет Всего: нет |
Посмотрите на тему активатор-ингибитор (Meinhardt-Gierer, Тьюринг).
Например: How the Leopard Gets Its Spots |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |