Для вывода фрактала на экран будем пробегать точки треугольника и к каждой точке применять функции и , выбираемые случайным образом. Для выбора одной из функций генерируется число из диапазона . Если меньше 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;
}
Результат работы программы
В данном параграфе будут рассмотрены инвариантные множества комплексных функций, отображающих плоскость в плоскость.
Множества Жюлиа. Пусть - полином степени с комплексными коэффициентами. Будем рассматривать итерации отображения , применяемые к точкам плоскости , определенные по формуле , где . Заметим, что рассмотренные ниже понятия могут быть определены и исследованы для функций , мероморфных в комплексной плоскости (т.е. аналитичных во всех точках расширенной комплексной плоскости за исключением конечного числа полюсов). Обозначим через - -ю итерацию функции , Если , то точка называется неподвижной точкой функции . Если для некоторой точки и целого числа имеет место равенство , то точка называется периодической точкой функции . В этом случае наименьшее целое число , для которого верно это равенство, называется периодом точки , а множество точек - орбитой периода
Для произвольной точки периода обозначим - значение производной от функции в точке . Если , то будем называть точку периода притягивающей, если - индифферентной, если - отталкивающей.
Множеством Жюлиа функции называется замыкание множества отталкивающих периодических точек функции . В случае, когда является полиномом, множество является инвариантным множеством как для отображения , так и для обратного отображения Это множество непусто, ограничено и замкнуто.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.