| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Генерирование случайного пятна |
| Автор: APXEOLOG 31.5.2011, 18:45 |
| Доброго времени суток. Работаем над генератором карт для tile-based игры. Интересуют алгоритмы генерации пятен (озер) случайной формы. Собственно в общем случае интересует генерация многоугольников (причем они могут быть невыпуклыми и иметь нестандартные пропорции). |
| Автор: _Y_ 2.6.2011, 08:34 |
| Если не очень быстрый алгоритм устроит, то я бы сделал так. На первом этапе создаем пятно с некрасивыми краями. 1) Наносим случайным образом точку на карте. Это зародыш пятна. 2) Обходим пятно по периметру случайным образом добавляя точки. 3) Возврящаемся к п.2 случайное число раз. На этом этапе важно правильно задать вероятности и критерий выхода из цикла. Можно, например, задать функцию уменьшения вероятности добавления новой точки по мере увеличения счетчика цикла и выходить из цикла если за проход не добавлено ни одной точки. Чем быстрее убывает такая вероятность - тем меньше получится озеро. Далее - сглаживаем края. Это можно сделать стандартным алгоритмом увеличения-уменьшения пятна. Сначала увеличиваем полученное пятно на N пикселей. Потом уменьшаем на то же число. Края при такой процедуре всегда сглаживаются. Чем больше N, тем глаже результат. Остнова в озере такие операции тоже убирают, если острова не очень большие. К сожалению я не помню названия этих операций увеличения-уменьшения. А http://forum.vingrad.ru/index.php?showtopic=314777&view=findpost&p=2246148 на работе. А на работу я попаду в лучшем случае на той неделе. |
| Автор: 1000000dollars 2.6.2011, 16:57 |
| А натыкать рандомно точек и обойти по ним, исключая некоторые (слишком крутые изгибы) ? Не? |
| Автор: Nostr 8.6.2011, 12:55 |
| Создается по N точкам правильный многоугольник, затем в нем выбирается пара вершин, которые соединяются прямой, отсекая фигуру. Если выбирать не слишком далекие друг от друга вершины - можно добиться нормальных результатов. Ну естественно без сглаживания никак |
| Автор: pvl16 22.6.2011, 09:53 |
| Посмотрите на тему активатор-ингибитор (Meinhardt-Gierer, Тьюринг). Например: http://classes.yale.edu/fractals/panorama/Biology/Leopard/Leopard.html |