Построить фрактал "Закрученный квадрат". Спираль строиться из квадратов, начальная позиция "x,y". Квадрат постепенно уменьшается и закручивается, меняя свой координаты. Определяя диагональ квадрата и изменяя "l", мы уменьшаем квадрат. А изменяя "а" мы меняем угол наклона. С помощью "k" мы меняем цвет с черного на белый. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, math; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure fract(x,y,a,l,k,a1:integer); //x,y: координаты начала каждой ветки, a: угол наклона, l: длина, k: номер ветвей, a1: изменение наклона при каждой новой ветке var p:integer; begin p := a1; // наклон в одну сторону if k mod 2 = 0 then // если номер ветки парное число p := -a1; // наклон идет в другую сторону while l > 3 do // пока длина ветки больше 3 begin with form1.Canvas do // работаем с канвасом формы begin pen.Width := 6-k; // толщина ветки pen.Color := rgb(random(255),random(255),random(255)); // её цвет moveto(x,y); // координаты начала линии lineto(x+round(cos(degtorad(a))*l),y+round(sin(degtorad(a))*l)); // прорисовка линии x := x+round(cos(degtorad(a))*l); // конец предыдущей делаем началом новой линии y := y+round(sin(degtorad(a))*l); a := a + p; // изменяем угл l := round(l / 1.17); // уменьшаем длину fract(x,y,a-(p*2),round(l / 1.2),k+1,a1+1);// вызываем рекурсивно эту же процедуру для дальнейшей прорисовки end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin fract(400,500,270,100,0,20); end; end.
Ключевые слова:
фрактал, квадрат
|
|||||||