2 июля 2007 г.

Фрактальная имитация рельефов

При попытке перечислить природные объекты с фрактальной структурой, большинство ограничивается лишь деревьями. Некоторые вспоминают еще облака. Но ведь этот список можно расширять до бесконечности.
Я считаю, что все созданное природой имеет фрактальную структуру. Это верно как для живой природы так и для неживой.
А раз нечто имеет фрактальную структуру тогда и моделировать его надо через фракталы. Начнем с того что под ногами - рельефа :) Тут конечно же необходимо использовать стохастические фракталы. Тут можно выделить два основных подхода:

  • рекурсивное разделение и изменение высот (Кроновер Р.М. Фракталы и хаос);

  • наращивание фрактальных структур на плоской поверхности (авторство мне неизвестно).


Рекурсивное разделение участка территории и изменение высот.
Это чрезвычайно простой способ в реализации. На вход мы получаем прямоугольный участок поверхности для которой заданы высоты вершин (1-4):

1----2
| |
3----4

Разделяем этот участок на 4 части просто поделив стороны пополам:
1----5----2
| | |
6----9----7
| | |
3----8----4

Высоты на серединах сторон (точки 5-8) вычисляют как среднее арифметическое соответствующих вершин.
А вот высота центральной точки 9 приравнивается среднему арифметическому всех вершин плюс некая случайная величина. Важно, что случайная величина может быть и положительной и отрицательной, а максимальный модуль этого значения характеризует тип получаемого рельефа. Иногда случайную величину делают зависимой от глубины рекурсии.
Далее процедура повторяется для прямоугольников 1-5-9-6, 5-2-7-9, 6-9-8-3 и 9-7-4-8.
Главное не забудьте об условии остановки рекурсии.


Наращивание фрактальных структур на плоской поверхности.
При этом подходе так же строиться карта высот по которой потом уже генерируется поверхность рельефа. Изначально карта высот инициализируется нулями. После фиксированное количество раз к ней прибавляется карта рандомизированного фрактального объекта с центром в случайном месте. Накладываясь друг на друга эти объекта создают весьма неожиданные эффекты.
Как создается указанный рандомизированный фрактальный объект? Конечно же рекурсивно. За основу береться геометрический примитив случайных размеров (в заданных рамках). Таким примитивом может быть конус, полусфера, колокол Гаусса или еще что-нибудь.
Далее объект порождает некое количество (либо фиксированное либо в определенных пределах) "потомков". Потомки - такие же примитивы, но уменьшенные в n раз. И располагаются они в пределах примитива-родителя. Потом эти потомки порождают своих потомков и т.д.
Результаты построения сильно зависят от количества порождаемых примитивов, от коэффициента уменьшения и от стартовой высоты примитива.
Вот примеры небольших участков сгенерированных таким методом:






Важно отметить что описанные методы являются базовыми, а не окончательными. Т.е. их можно и даже необходимо улучшать. Например учитывать предельный наклон для грунта.

Комментариев нет: