Суббота, 21.06.2025, 11:58
Приветствую Вас Гость

Мой сайт

Главная » 2014 » Март » 27 » Фракталы проект. Фракталы
16:34

Фракталы проект. Фракталы





Понятия фрактал и фрактальная геометрия появились в конце 70-х, а с середины 80-х они прочно вошли в обиход математиков и программистов. Слово фрактал образовано от латинского fractus и в переводе означает состоящий из фрагментов. Оно было предложено Бенуа Мандельбротом в 1975 году для обозначения нерегулярных, но самоподобных структур, которыми он занимался.

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

Определение фрактала, данное Мандельбротом, звучит так: "Фракталом называется структура, состоящая из частей, которые в каком-то смысле подобны целому".

Геометрические фракталы являются наиболее наглядными. Их получают с помощью некоторой ломаной (или поверхности в трехмерном случае), называемой генератором. За один шаг алгоритма каждый из отрезков, составляющих ломаную, заменяется на ломаную-генератор в соответствующем масштабе. В результате бесконечного повторения этой процедуры, получается геометрический фрактал.

Рассмотрим один из таких фрактальных объектов – триадную кривую Коха. Построение кривой начинается с отрезка единичной длины (0-е поколение). Далее каждое звено (в нулевом поколении один отрезок) заменяется на образующий элемент, обозначенный на Фиг.1 через n=1. В результате такой замены получается следующее поколение кривой. В 1-ом поколении – это кривая из четырех прямолинейных звеньев, каждое длиной по 1/3. Для получения 3-го поколения проделываются те же действия – каждое звено заменяется на уменьшенный образующий элемент. Итак, для получения каждого последующего поколения, все звенья предыдущего поколения необходимо заменить уменьшенным образующим элементом. Кривая n-го поколения при любом конечном n называется предфракталом. На Фиг.1 представлены пять поколений кривой. При n, стремящимся к бесконечности, кривая Коха становится фрактальным объектом.

Одним из методов описания и генерации фрактальных структур являются системы итерированных функций (Iterated Functions System – IFS).

IFS – это совокупность отображений одного многомерного множества на другое. Предельное множество, порожденное многократным (в пределе – бесконечно большим) итерационным применением IFS, называется аттрактором IFS. Наиболее простая IFS состоит из аффинных преобразований плоскости:

Таким образом, одно аффинное преобразование задается шестью коэффициентами. Как правило, объект описывается несколькими аффинными преобразованиями.

Фиг. 1. Геометрический фрактал «Кривая Коха».

В качестве начального множества задается точка на плоскости (0, 0). Затем к этому множеству итерационно применяется IFS, заданное матрицей коэффициентов аффинных преобразований (каждая строка матрицы соответствует одному аффинному преобразованию, а число столбцов матрице равняется 6). Таким образом, если фрактал задан, например, тремя аффинными преобразованиями, после первой итерации будет получено множество из трех точек, после второй – из 9, после n итераций – 3n точек на плоскости.

Проект geometric_fractal демонстрирует использование функциональных подстановок для генерации фрактальных структур методом систем итерированных функций (IFS), задающих аффинные преобразования на плоскости.

Модель содержит следующие клеточные объекты (Фиг. 2, 3):

· float::area – основное поле моделирования размером 300x300x3. В первом, верхнем слое выполняется собственно генерация фрактала (клетки, принадлежащие фракталу, отмечаются красным цветом, а не принадлежащие – белым). Второй и третий слои являются вспомогательными, в них записываются x и y координаты клетки, принадлежащих фракталу. Размеры объекта float::area по x и y можно менять произвольным образом, исходя из вычислительных возможностей компьютера, на котором выполняется моделирование: чем больше эти размеры, тем больше времени требуется на каждую итерацию, но тем красивее получается фрактал;

· float::matrix – поле для хранения матрицы коэффициентов аффинных преобразований (неиспользуемые строки заполняются значением 0);

· t – шаблон для основной функциональной подстановки, реализующей однократное применение IFS;

· void и init – вспомогательные объекты для очистки клеточного массива float::area перед началом моделирования.

Моделирование осуществляется следующим образом. Вначале пользователю предлагается выбрать один из 9 геометрических фракталов. В соответствие с тем, какой фрактал был выбран, заполняются коэффициенты аффинных преобразований в клеточном массиве float::matrix. Затем инициализируется стартовая точка float::area(0,0,0), т.е. окрашивается в красный цвет. Далее выполняется 9 итераций применения IFS. Для каждой красной точки верхнего слоя массива float::area считываются ее x и y координаты из второго и третьего слоя соответственно и вычисляются координаты новых точек фрактала (от одной до пяти – в зависимости от того, сколько строк массива float::matrix содержат ненулевые значения). Эти новые точки окрашиваются красным в первом слое, а во втором и третьем слоях запоминаются их x и y координаты.

Число итераций 9 подобрано эмпирически – при увеличении размеров по x и y массива float::area число итераций также рекомендуется увеличить.

Анализируя полученные изображения, можно заметить на некоторых из них отдельно стоящие красные точки, которые, очевидно, не принадлежат моделируемому фракталу. Эти «лишние» точки всегда относятся к самым первым поколениям и возникают в том случае, если фракталу не принадлежит точка, заданная в качестве начального множества (в нашем случае точка (0,0)). Поэтому данное явление наблюдается, например, в модели фрактала «Кривая Коха» (Фиг. 2), и не наблюдается в модели фрактала «Ковер Серпинского» (Фиг. 3). Если в модели фрактала «Кривая Коха» в качестве начального множества выбрать точку, заведомо принадлежащую фракталу, то «лишние» точки перестанут появляться.

Фиг. 2. Моделирование геометрического фрактала «Кривая Коха» в WinALT.

Фиг. 3. Моделирование геометрического фрактала «Ковер Серпинского» в WinALT.

Алгебраические фракталы – это самая крупная группа фракталов, получаемых с помощью нелинейных процессов в n-мерных пространствах (наиболее изучены двухмерные процессы). В качестве примера рассмотрим множество Жюлиа. Алгоритм его построения основан на простом итеративном выражении:

где Zi и C – комплексные переменные. Итерации выполняются для каждой стартовой точки Z прямоугольной или квадратной области – подмножестве комплексной плоскости. Итерационный процесс продолжается до тех пор, пока Zi не выйдет за пределы окружности радиуса 2, центр которой лежит в точке (0,0), что означает, что аттрактор динамической системы находится в бесконечности, или после достаточно большого числа итераций Zi сойдется к какой-нибудь точке окружности. В зависимости от количества итераций, в течение которых Zi оставалась внутри окружности, можно установить цвет исходной точки: точки, которые в течение бесконечного числа итераций не уходят в бесконечность, окрашиваются в черный цвет, а точки, уходящие в бесконечность за конечное число итераций окрашиваются в цвет фона.

Проект algebraic_fractal демонстрирует использование функциональных подстановок для генерации фракталов, относящихся к множеству Жюлиа.

Модель содержит следующие клеточные объекты (Фиг. 4):

· float::area – основное поле моделирования размером 200x200x3. В первом, верхнем слое выполняется собственно генерация фрактала (клетки, принадлежащие фракталу, отмечаются красным цветом, а не принадлежащие – белым). Второй и третий слои являются вспомогательными, в них записываются полученные в текущей итерации Re(Zi) и Im(Zi) соответственно. Размеры объекта float::area по x и y можно менять произвольным образом, исходя из вычислительных возможностей компьютера, на котором выполняется моделирование: чем больше эти размеры, тем больше времени требуется на каждую итерацию, но тем красивее получается фрактал;

· t – шаблон для основной функциональной подстановки, реализующей определение принадлежности точки множеству Жюлиа.

Моделирование осуществляется следующим образом. Вначале пользователю предлагается выбрать одно из 10 выражений, задающих фрактал. Далее инициируется массив float::area: все клетки первого слоя окрашиваются в красный цвет, клеткам второго слоя присваивается значение, соответствующее их x-координате, а клеткам второго слоя – значение, соответствующее их y-координате (координаты пересчитываются таким образом, чтобы массив float::area представлял плоскость от (-1,-1) до (1,1)).

Затем выполняется 30 итераций применения итеративного выражения, задающего фрактал. Для каждой красной точки верхнего слоя массива float::area считываются ее x- и y-координаты из второго и третьего слоя соответственно, соответствующие Re(Zi) и Im(Zi), вычисляются значения Re(Zi+1) и Im(Zi+1), запоминаются во втором и третьем слое вместо предыдущих значений. Затем проверяется, не вышла ли новая точка за пределы окружности радиусом 2, и, если это так, соответствующая клетка в первом слое окрашивается в белый цвет, как не принадлежащая фракталу.

Число итераций 30 подобрано эмпирически – при увеличении размеров по x и y массива float::area число итераций также рекомендуется увеличить.

Фиг. 4. Моделирование алгебраического фрактала «Множество Жюлиа» в WinALT



Источник: winalt.sscc.ru
Просмотров: 4963 | Добавил: wasking | Рейтинг: 0.0/0
Всего комментариев: 0
Форма входа
Поиск
Календарь
«  Март 2014  »
Пн Вт Ср Чт Пт Сб Вс
     12
3456789
10111213141516
17181920212223
24252627282930
31
Архив записей
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Copyright MyCorp © 2025Конструктор сайтовuCoz