Программа для построения фрактала Джулиа

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.

Программа для построения фрактала Кох

Program fr_kox;

uses graph,crt;

var x0,y0,x,y,gd,gm:integer;x1,y1:real;

{*** рекурсивная процедура построения линии Коха ***}

procedure kox(xn,yn,xk,yk:real);

var x2,y2,x3,y3,x4,y4:real; c:char;

begin

if abs(xn-xk)<2 then exit;

x2:=xn+(xk-xn)/3; y2:=yn+(yk-yn)/3;

x3:=xn+(xk-xn)*2/3; y3:=yn+(yk-yn)*2/3;

x4:=x2+(x3-x2)*cos(pi/3)+(y3-y2)*sin(pi/3);

y4:=y2-(x3-x2)*sin(pi/3)+(y3-y2)*cos(pi/3);

line(round(x2),round(y2),round(x4),round(y4));

line(round(x3),round(y3),round(x4),round(y4));

if keypressed then halt;

kox(xn,yn,x2,y2); {рекурсивные вызовы}

kox(x2,y2,x4,y4);

kox(x4,y4,x3,y3);

kox(x3,y3,xk,yk);

end;

begin

x0:=50; y0:=250;

x:=590; y:=250;

gd:=Detect;

initgraph(gd,gm,'C:\BP\BGI');

setcolor(10);

line(x0,y0,x,y);

kox(x0,y0,x,y); {Рисование фрактала - линии Коха}

readkey;

cleardevice;

{Рисование фрактального треугольника с использованием}

{процедуры для построения линии Коха}

x0:=150; y0:=320;

x:=490; y:=320;

x1:=x0+(x-x0)*cos(pi/3)+(y-y0)*sin(pi/3);

y1:=y0-(x-x0)*sin(pi/3)+(y-y0)*cos(pi/3);

kox(x0,y0,x1,y1);

kox(x1,y1,x,y);

kox(x,y,x0,y0);

readkey;

closegraph

end.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: