Методические указания к лабораторным работам по курсу “Компьютерная графика”, страница 3

Пример 6. Кривая Коха. Отрезок разбивается на три равные части. Средняя часть удаляется и вместо нее вставляется два отрезка, каждый из которых в три раза короче исходного. Затем эта процедура применяется к каждому из четырех полученных отрезков (рис. 4.). Затем это построение вновь применяется к каждому отрезку и т.д. Кривая, получающаяся в пределе называется кривой Коха. Обозначим ее .

Приведем текст программы для изображения ломаной, полученной после многократной итерации этой процедуры.

//coh.cpp

#include <graphics.h>

#include <conio.h>

#include <stdlib.h>

#include <math.h>

float xmin = -1.5, xmax = 1.5, ymin = -0.7, ymax = 1.5; //координаты                                                            //окна

int ex(float x)

{                        // экранная x-координата

       return (int) ((x-xmin)/(xmax-xmin)*(getmaxx()+1));

}

int ey(float y)

{                        // экранная y-координата

       return (int) ((ymax-y)/(ymax-ymin)*(getmaxy()+1));

}

//функция построения кривой Коха

void coh(double xp, double yp, double xq, double yq, int M)

{

if (M>0)

{

       coh(xp, yp, 2*xp/3+xq/3, 2*yp/3+yq/3, M-1);

       coh(2*xp/3+xq/3, 2*yp/3+yq/3, xp/2+xq/2-(yq-yp)*sqrt(3)/6,

yp/2+yq/2+(xq-xp)*sqrt(3)/6, M-1);

coh(xp/2+xq/2-(yq-yp)*sqrt(3)/6, yp/2+yq/2+(xq-xp)*sqrt(3)/6,

xp/3+2*xq/3, yp/3+2*yq/3, M-1);

coh(xp/3+2*xq/3, yp/3+2*yq/3, xq, yq, M-1);

} else line (ex(xp), ey(yp), ex(xq), ey(yq));

}

main()

{

int gd=DETECT, gm;             // драйвер виедоадаптера и номер режима

initgraph (&gd, &gm, “..\\BGI”); // инициализация графического режима

// setfillstyle(SOLID_FILL, WHITE);       // закраска экрана

// bar(0,0,getmaxx(), getmaxy());         // белым цветом

coh(-1, 0, 1, 0, 5);

getch();                            // прием символа с клавиатуры

closegraph(); return 0;

}

Результат работы программы:

Вычислим размерность Хаусдорфа-Безиковича кривой Коха. При  кривую можно покрыть выпуклыми множествами  диаметра  Число этих множеств будет равно  Получаем  Предел  будет равен нулю при  Нижняя грань чисел , удовлетворяющих этому неравенству будет равна  Следовательно,

Классификация фракталов. Мы определили фрактал как подмножество  евклидова пространства, удовлетворяющее неравенству  Ниже приведена классификация фракталов в зависимости от метода построения.

·  Геометрические фракталы. Эти фракталы самые наглядные. На плоскости их получают с помощью некоторой ломаной (в пространстве – с помощью поверхности), называемой генератором. Фрактал строится с помощью бесконечного повторения процедуры, состоящей в замене каждого отрезка генератором, как это делалось, например, при построении кривой Коха.

·  Алгебраические фракталы. Нелинейный процесс в -мерном пространстве интерпретируется как дискретная динамическая система. Это позволяет определять для нелинейных процессов понятия, аналогичные рассматриваемым в теории динамических систем понятиям фазового портрета, стационарного процесса, аттрактора и т.д. Нелинейные динамические системы обладают несколькими устойчивыми состояниями. Эти устойчивые состояния называются аттракторами (термин аттрактор применяется также и в другом смысле, пп 3). Каждый аттрактор обладает некоторой областью начальных состояний, из которых система обязательно попадет в состояние, соответствующее этому аттрактору. Эта область называется областью притяжения данного аттрактора. Если процесс происходит в плоскости, то окрашивая области притяжения различными цветами, можно получить цветовой фазовый портрет этой системы. Рассмотрим, например, множество Мандельброта, программа вывода которого на экран была приведена в главе 2. Итерационный процесс описывается формулой  где  и  - комплексные переменные. Итерация выполняется для каждой стартовой точки  прямоугольной области. Итерационный процесс продолжается до тех пор, пока точка  не выйдет за пределы круга радиуса 2 с центром в точке  Это означает, что аттрактор динамической системы находится на бесконечности. Точка может в течение достаточно большого числа итераций оставаться внутри круга, в этом случае стартовая точка окрашивается в черный цвет. Если же точка принадлежит области притяжения аттрактора, находящегося на бесконечности, то она окрашивается в цвет, зависящий от числа итераций, при которых точка оставалась в круге.