Создание рельефов и фракталов в VRML

Для того чтобы приблизить VRML сцены к реальности необходимо создать рельеф, на котором будут располагаться объекты. Для этого в VRML существует специальный узел ElevationGrid.

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

Код узла выглядит так:

В поле height находится набор высот в пересечениях линий сетки. Поле xDimension содержит количество ячеек по оси X, а zDimension содержит количество ячеек по оси Z. Несложно посчитать, что всего ячеек будет xDimension*zDimension. Из этого следует, что в поле height должно содержатся столько же высот, сколько и ячеек у сети. В примере кода ячеек по оси X и по оси Z — 28, следовательно, всего ячеек – 784.

Поля xSpacing и zSpacing задают размеры ячейки, и чем он больше, тем больше получившийся рельеф. Из примера видно, что длинна рельефа по оси X будет равна 28*3=84 метра, и по оси Z тоже получается 84 метра.

Вручную очень сложно прописать высоты так, чтобы получился реалистичный рельеф. Так же количество точек рельефа обычно превышает 16000, что так же вручную прописать практически невозможно. Поэтому для создания рельефа используются специальные программы. Эти программы используют различные технологии построения рельефов. Самая простая технология основывается на предварительном создании карт высот, по которым в дальнейшем вычисляются высоты рельефа.

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

карта высот

Чтобы перевести цвет в высоту считывается глубина серого цвета, и она становится высотой, так как глубина находится в промежутке от 0 до 255, то для создания более высоких рельефов используется коэффициент масштаба. Этот коэффициент задает высоты в промежутке от 0 до K*255, где K может быть любым положительным числом.

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

Но времена изменились, и теперь негладкие функции наравне с гладкими рассматриваются в математики. Это произошло благодаря появлению термина «Фрактал».

Фрактал – это такое множество, которое имеет хаусдорфову (или фрактальную) размерность [9]. Фракталы, например, позволяют описать обычные деревья, которые растут у нас за окном, с помощью математики. Так же фракталы нашли свое применение в компьютерном дизайне, алгоритмах сжатия информации, радиотехнике, экономике и во многих других областях нашей жизни.

А также структуры, похожие на фракталы, можно обнаружить в окружающей нас природе: границы облаков, границы морских побережий, турбулентные потоки в жидкостях, трещины в некоторых породах, зимние узоры на стекле, изображение структуры некоторых веществ, полученные с помощью микроскопа, кровеносная система сердечной мышцы и так далее [9].

Чтобы увидеть фрактал можно выйти на улицу, но там не увидишь самых сложных и красивых фракталов. Эти фракталы необходимо строить на компьютере. Для построения фракталов используются специальные итерационные формулы, и для них характерно задание «основы» и «фрагмента», появляющегося при каждом изменении масштаба.

Например, рассмотрим звездный фрактал, изображенный на этом рисунке:

фрактал звезда

Он состоит из правильной пятиконечной звезды с гирляндой из пяти меньших образцов. Каждая из пяти более мелких звезд несет на своих свободных концах еще более мелкие звезды. Этот процесс можно продолжать бесконечно, но на обычном рисунке будет сложно увидеть дальнейшие результаты. Полученный фрактал обладает самоподобием. На рисунке показано 1280 итераций, то есть 5 шагов построения. Это увеличенная часть фрактала:

фрактал звезда
фрактал звезда

Этот звездный фрактал строится как замкнутая ломаная линия, последовательные отрезки всегда пересекаются под одним и тем же углом [9].

Построение звездного фрактала происходит при угле . Так как он построен за 1280 итераций, следовательно, он имеет 1280 отрезков. Пронумеруем каждый отрезок от 0 до n=1279. Первый отрезок будет иметь направление , а отрезок с индексом n будет иметь направление .

Так же существует правило определения длины n-го отрезка. Для этого фрактала существует пять различных длин: 1, r, где r – показатель уменьшения. Для нашего фрактала он равен 0,35. Длина отрезка определяется следующим образом:

n=1, 2, 3, 5, 6, 7, 9, 10, 11, 13, …

Длинна

n=4, 8, 12, 20, 24, 28, 36, 40, …

Длина

n=16, 32, 48, 80, 96, 112, …

Длина

n=64, 128, 192, 320, 284, 448, …

Длина r

n=0, 256, 512, 768, 1024, …

Длина 1

Из этой таблицы следует, что длина отрезка с индексом n зависит от числа множителей 4 (в общем случае обозначается v) в n [9].

В этом звездном фрактале будет 5 отрезков максимальной длины равных 1, 15 – длины r, 60 – длины , 240 – длины и 960 – длины .

Эти значения высчитываются по формулам: (v+1) – длины 1; (v+1)(v-1) – длины r; (v+1)(v2-v) – длины ; (v+1)(v3-v2) длины ; (v+1)(v4-v3) – длины .

Этот звездный фрактал строится при v=4, α=4π/5, r=0,35. А если понять параметры, то получится новый фрактал. Вот что будет, если v=19 и r=0,43, а угол остается прежним: