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

Для вывода фрактала на экран будем пробегать точки треугольника  и к каждой точке применять функции  и , выбираемые случайным образом. Для выбора одной из функций генерируется число  из диапазона . Если  меньше 60, что имеет место в  случаев, то применяется функция , а в других случаях применяется функция . Для наглядности изменяется цвет, в зависимости от того, какая функция была выбрана. Общий цикл повторяется, пока не нажата клавиша.

Программа

// стохастический метод изображения дракона Хартера-Хейтуэя dragst.cpp

#include <graphics.h>

#include <conio.h>

#include <stdlib.h>

#include <time.h>

float xmin = -0.5, xmax = 2.,

     ymin = -0.5, ymax = 1.; // координаты окна

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));

}

float f1x(float x, float y)

{

return(x+y)/2; // преобразование абсциссы первой функцией IFS

}

float f1y(float x, float y)

{

return(x-y)/2; // преобразование ординаты первой функцией IFS

}

float f2x(float x, float y)

{

return(x+y+1.)/2; // преобразование абсциссы второй функцией IFS

}

float f2y(float x, float y)

{

return(-x+y+1.)/2; // преобразование ординаты второй функцией IFS

}

main()

{

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

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

double x, y, xx, yy, xxx, yyy; // координаты точек

double hx=0.01, hy=0.01;       // приращения координат

int i, M=100, k, cl; // счетчик, число итераций, случайное число, цвет

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

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

randomize();             // инициализация генератора случайных чисел

while(!kbhit())          // пока не нажата клавиша

{

       for (y=0.5; y>=0; y-=hy) // (x,y) пробегает точки треугольника

for(x=y; x<=1.-y; x+=hx) // с вершинами (0,0),(1,0),(0.5,0.5)

{

             xx=x; yy=y;

             for (i=0; i<M;i++) // итерация системы преобразований IFS

             {

                   k=random(100);

                   if (k<60) // в 60% случаев

                   { // применяется первое преобразование

                         xxx=f1x(xx,yy); yyy=f1y(xx,yy);

                         xx=xxx; yy=yyy; cl=BLUE;

} else // в остальных случаях

{ // применяется второе преобразование

                         xxx=f2x(xx,yy); yyy=f2y(xx,yy);

      xx=xxx; yy=yyy; cl=GREEN;

}

}     putpixel(ex(xx),ey(yy),cl); // вывод точки

}

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

closegraph(); return 0;

}

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

4. Алгебраические фракталы

В данном параграфе будут рассмотрены инвариантные множества комплексных функций, отображающих плоскость в плоскость.

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

Для произвольной точки  периода  обозначим  - значение производной от функции  в точке . Если , то будем называть точку  периода  притягивающей, если  - индифферентной, если  - отталкивающей.

Множеством Жюлиа  функции  называется замыкание множества отталкивающих периодических точек функции . В случае, когда  является полиномом, множество  является инвариантным множеством как для отображения , так и для обратного отображения  Это множество непусто, ограничено и замкнуто.