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.