- •Лекция Фрактальная графика.
- •1. Понятие о фракталах.
- •2. Определение фракталов. Классификация фракталов.
- •3. Системы итерируемых функций.
- •4. Геометрические фракталы.
- •4.1. Снежинка Коха
- •Вариации на тему кривой Коха
- •4.2. Треугольник Серпинского
- •Построение треугольника Серпинского с помощью рекурсии
- •4.3. Драконова ломаная
- •5. Алгебраические фракталы
- •5.1. Множество Мандельброта.
- •5.2.Множество Жюлиа
- •5.3. Фрактал Ньютона
- •7. Фракталы в природе (frakt-lecture.Pdf)
3. Системы итерируемых функций.
Определение. Линейное преобразование вместе с последующим преобразованием сдвига будем называть аффинным преобразованием.
Аффинное преобразование в пространстве можно представить в матричной форме:
Важное свойство аффинного преобразования заключается в том, что аффинное преобразование отрезок переводит в отрезок.
Аффинное преобразование плоскости однозначно определяется тройкой не лежащих на одной прямой точек и их образами. В самом деле, пусть некоторое АП отображает точки , , в точки , и .
Тогда имеем:
Если
то получаем следующую систему линейных уравнений:
Или, переписывая, получаем:
Решая эту систему, находим матричное представление аффинного преобразования.
Системе итерируемых функций в пространстве :
соответствует следующий формат представления:
Fractal {
a1 b1 c1 d1 e1 f1 p1
a2 b2 c2 d2 e2 f2 p2
..............
an bn cn dn en fn pn
}
где числа есть вероятности выбора соответствующих преобразований в рандомизированном алгоритме.
Для построения фракталов, задаваемых таким способом требуется в программе описать процедуру изменения координат по задаваемому коэффициентами СИФ закону.
Пример. Написать программу построения фрактала Лист, задаваемого следующим набором СИФ:
Leaf_3 { 0.60 -0.6 0.6 0.60 0.00 0.0 0.5 0.53 0.0 0.0 0.53 0.47 0.0 0.5 }
|
Рис. Фрактал Лист. |
program Leaf_3;
uses CRT, Graph;
var
gd,gm : Integer;
const
iter = 50000;
procedure Draw;
var
t, x, y, p : Real;
k : LongInt;
mx, my, rad : Integer;
begin
mx := 10;
my := 250;
rad :=600;
Randomize;
x := 0.0;
y := 0.0;
for k := 1 To iter do
begin
p := Random;
t := x;
if p <= 1/2 then
begin
x := 0.6 * x -0.6* y;
y := 0.6 * t +0.6* y;
end
else
begin
x := 0.53 * x +0.0 * y +0.47;
y := 0.0* t +0.5 * y;
end;
PutPixel(mx + Round(rad * x), my - Round(rad * y), 2);
end;
end;
begin
gd := Detect;
InitGraph(gd,gm,'d:\bp\bin');
Draw;
ReadKey;
CloseGraph;
end.
4. Геометрические фракталы.
4.1. Снежинка Коха
Строится она на основе равностороннего треугольника. Каждая линия которого ___ заменяется на 4 линии каждая длинной в 1/3 исходной _/\_. Таким образом, с каждой итерацией длинна кривой увеличивается на треть. И если мы сделаем бесконечное число итераций - получим фрактал - снежинку Коха бесконечной длинны. Получается, что наша бесконечная кривая покрывает ограниченную площадь. Попробуйте сделать то же самое методами и фигурами из евклидовой геометрии. Для построения геометрических фракталов хорошо приспособлены так называемые L-Systems. Суть этих систем состоит в том, что имеется определенных набор символов системы, каждый из которых обозначает определенное действие и набор правил преобразования символов. Этот способ построения изображений будет рассмотрен более подробно далее.
Построение кривой Коха
Процесс построения кривой Коха выглядит следующим образом: берём единичный отрезок, разделяем на три равные части и заменяем средний интервал равносторонним треугольником без этого сегмента. В результате образуется ломанная, состоящая из четырёх звеньев длины . На следующем шаге повторяем операцию для каждого из четырёх получившихся звеньев. Предельная кривая и есть кривой Коха.
Кривую Коха можно также построить с помощью двух СИФ-преобразований:
В формате FRACTINT эти преобразования запишутся следующим образом:
Curve_Koch {
0.5 0.288675 0.288675 -0.5 0 0 0.5
0.5 -0.288675 -0.288675 -0.5 0.5 0.288675 0.5
}
Кривая Коха имеет бесконечную длину. Кроме того, кривая Кох состоит из четырёх равных частей, каждая из которых подобна всей кривой с коэффициентом подобия 1/3. Отсюда следует, что каждая часть кривой имеет бесконечную длину. Также эта кривая нигде себя не пересекает, так как достраиваемые треугольники каждый раз достаточно малы и никогда не "сталкиваются" друг с другом.