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

Program fr_paporotnik;

uses crt, graph;

const alfa=80;beta=2.1; k=0.3; k1=0.5; lmin=1;

var a,b,c,d,e,f,g,h:real; gd,gm:integer;

{*** рекурсивная процедура на основе метода IFS ***}

procedure step(x1,y1,x2,y2:real; nom:integer);

var x3,y3,x4,y4,x5,y5,x6,y6,x7,y7:real;

begin

if sqr(x1-x2)+sqr(y1-y2)>lmin then

begin

{координаты точек вычисляются по формулам}

x3:=(x2-x1)*a-(y2-y1)*b+x1; y3:=(x2-x1)*b+(y2-y1)*a+y1;

x4:=x1*c+x3*d; y4:=y1*c+y3*d;

x5:=x4*e+x3*f; y5:=y4*e+y3*f;

x6:=(x5-x4)*g-(y5-y4)*h+x4; y6:=(x5-x4)*h+(y5-y4)*g+y4;

x7:=(x5-x4)*g+(y5-y4)*h+x4; y7:=(x5-x4)*(-h)+(y5-y4)*g+y4;

line(round(x1),round(y1),round(x4),round(y4));

{рекурсивные вызовы для рисования фрагментов фрактала}

step(x4,y4,x3,y3,nom);

step(x4,y4,x6,y6,nom+1);

step(x4,y4,x7,y7,nom+1);

end;

end;

begin

gd:=Detect;

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

setBkcolor(1);

{вычисление коэффициентов}

a:=cos(pi/alfa); b:=sin(pi/alfa);

c:=1-k; d:=k;

e:=1-k1; f:=k1;

g:=cos(pi/beta); h:=sin(pi/beta);

step(200,350,225,70,0); {рисование ветки папоротника}

readkey;

closegraph

end.

Программа построения треугольника Серпинского

program fr_treug_serpinsky;

uses graph,crt;

const m=2500; { количество точек фрактала }

type koord=array[1..3] of integer;

var gd,gm: integer;

x,y: koord; { массивы координат }

{**** Процедура заполнения заданного треугольника точками ****}

procedure serpinsky(xs,ys:koord);

var x0,y0,xk,yk: real; n,k: integer;

begin

randomize;

x0:=(xs[1]+xs[2]+xs[3])/3; { координаты начальной точки }

y0:=(ys[1]+ys[2]+ys[3])/3;

for k:=1 to m do

begin

n:=random(3)+1; { случайная вершина }

xk:=(x0+xs[n])/2; { середина отрезка, соединяющего }

yk:=(y0+ys[n])/2; { начальную точку с вершиной }

putpixel(round(xk), round(yk), 12); { вывод точки }

x0:=xk; { новые координаты для начальной точки }

y0:=yk

end;

end;

begin

gd:=Detect;

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

setcolor(10);

setviewport(20,20,500,250, true);

x[1]:=320; y[1]:=50; { координаты вершин треугольника }

x[2]:=150; y[2]:=200;

x[3]:=450; y[3]:=200;

serpinsky(x,y); { процедура вывода треугольника Серпинского }

readkey;

closegraph

end.


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



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