Построить фрактал снежинка Алгоритм работы над задачей: {$S+} Uses graph,crt; label 1,2; var x,y,a,b,p,n:integer; t,l:real; g:char; procedure snow(x,y,k:integer;l:real); var x1,y1:integer; i:integer; begin if k=0 then exit; for i:=1 to p do {открываем цикл от 1 до р} begin x1:=trunc(x+l*cos(2*pi*(i-1)/p-pi/2)); {вычислям координаты, округляя их до целых значений} y1:=trunc(y+l*sin(2*pi*(i-1)/p-pi/2)); if (x1>640) or (y1>480) or (x1<0) or (y1<0) then begin {проверяем попадают ли эти координаты в пределы экрана} outtextxy(10,10,'Sorry, picture not on the screen !!!'); outtextxy(10,20,'Press any key for exit'); end; if keypressed then halt; line(x,y,x1,y1); {рисуем на экране линию с вычисленными координатами} snow(x1,y1,k-1,l*t); {повторяем процедуру при этом уменьшая к на 1 и уменьшаем l на коэффициен уменьшения каждого звена. Это будет повторяться до тех пор пока k не станет равным 0, и пока не нарисуем отрезок последнего звена l*t^n-1 } end; end; begin x:=320; {задаем центр снежинки} y:=240; t:=0.4; {задаем t - коэффициент уменьшения каждого звена} write('n='); readln(n); {пользователем вводится колличество звеньев снежинки} write('p='); readln(p); {пользователем вводится колличество ветвей снежинки} l:=y*(1-t)/(1-exp(n*Ln(t)))-1; {выводим коэффициент масштабирования, для l так что при увеличении колличества звеньев снежинка не выйдет за пределы экрана } a:=detect; b:=detect; {подключаем графику} initgraph(a,b,'c:\lg\bgi'); snow(x,y,n,l); {вызов процедуры} readkey; {ожидаем нажатия клавиши и закрываем графику} closegraph; end.
Ключевые слова:
фрактал, снежинка, масштабирование
|
|||||||