- •Лекция 13 Фрактальные алгоритмы Геометрические фракталы
- •Алгоритмические фракталы
- •Площадные фракталы
- •Фракталы на основе метода ifs
- •Применение методов фрактальной графики
- •Программа для построения фрактала Мандельброта
- •Программа для построения фрактала Джулиа
- •Программа для построения фрактала Кох
- •Программа для построения ветки папоротника
- •Программа построения треугольника Серпинского
Программа для построения фрактала Мандельброта
Program fr_mandelbrot;
uses crt,graph;
const mi=511;
var gd,gm:integer;
function c(index:integer):integer; {определение цвета точки}
begin
c:=1*(mi-index)
end;
{** функция подсчета количества итераций **}
function iteration(x,y:double):integer;
var i:integer; xx,yy,xk,yk:double;
begin
xx:=x; yy:=y; i:=0;
while (sqr(xx)+sqr(yy)<=4) do
begin
xk:=sqr(xx)-sqr(yy)+x;
yk:=2*xx*yy+y;
xx:=xk; yy:=yk; i:=i+1;
if i>=mi then break
end;
iteration:=i;
end;
{*** процедура формирования фрактала ***}
procedure mand(xx,yy,cx,cy:integer; minx,maxx,miny,maxy:double);
var stepx, stepy,x,y:double; i,j,iter:integer;
begin
stepx:=(maxx-minx)/cx;
stepy:=(maxy-miny)/cy;
y:=miny;
for j:=0 to cy do
begin
x:=minx;
for i:=0 to cx do
begin
iter:=iteration(x,y);
putpixel(xx+i,yy+j,c(iter));
x:=x+stepx;
end;
y:=y+stepy
end;
end;
begin
gd:=Detect;
initgraph(gd,gm,'C:\BP\BGI');
setBkcolor(1);
{формирование фрактала с разной степенью детализации}
mand(0,0,640,480,-2.2,1,-1.2,1.2); {весь фрактал}
readkey;
cleardevice;
{увеличенные фрагменты фрактала}
mand(0,0,640,480,-0.85,-0.7,0.1,0.25);
readkey;
cleardevice;
mand(0,0,640,480,-0.8,-0.7,0.2,0.3);
readkey;
cleardevice;
mand(0,0,640,480,-1.25,-1,-0.5,-0.25);
readkey;
cleardevice;
mand(0,0,640,480,-1.05,-1,-0.35,-0.3);
readkey;
closegraph;
end.
Программа для построения фрактала Джулиа
Program fr_Julia;
uses crt,graph;
const mi=511;
var gd,gm:integer;
function c(index:integer):integer; {определение цвета точки}
begin
c:=7*(mi-index)
end;
{** функция подсчета количества итераций **}
function iteration(x,y:double):integer;
const cx=0.36;cy=0.36;
var i:integer; xx,yy,xk,yk:double;
begin
xx:=x; yy:=y; i:=0;
while (sqr(xx)+sqr(yy)<=4) do
begin
xk:=sqr(xx)-sqr(yy)+cx;
yk:=2*xx*yy+cy;
xx:=xk; yy:=yk; i:=i+1;
if i>=mi then break
end;
iteration:=i;
end;
{*** процедура формирования фрактала ***}
procedure julia(xx,yy,cx,cy:integer; minx,maxx,miny,maxy:double);
var stepx, stepy,x,y:double; i,j,iter:integer;
begin
stepx:=(maxx-minx)/cx;
stepy:=(maxy-miny)/cy;
y:=miny;
for j:=0 to cy do
begin
x:=minx;
for i:=0 to cx do
begin
iter:=iteration(x,y);
putpixel(xx+i,yy+j,c(iter));
x:=x+stepx;
end;
y:=y+stepy
end;
end;
begin
gd:=Detect;
initgraph(gd,gm,'C:\BP\BGI');
setBkcolor(1);
{формирование фрактала с разной степенью детализации}
julia(0,0,640,480,-1,1,-1.2,1.2); {весь фрактал}
readkey;
cleardevice;
{увеличенные фрагменты фрактала}
julia(0,0,640,480,-0.1,0.1,-0.1,0.1);
readkey;
cleardevice;
julia(0,0,640,480,-1,0,-1.2,0);
readkey;
cleardevice;
julia(0,0,640,480,-1,-0.5,-0.5,0);
readkey;
cleardevice;
julia(0,0,640,480,-0.75,-0.06,-0.5,-0.35);
readkey;
cleardevice;
julia(0,0,640,480,-0.68,-0.65,-0.37,-0.36);
readkey;
closegraph;
end.