Среда программирования:
Lazarus
Статья по теме:
Одним из тех объектов, которые удобно строить при помощи вероятностных распределений является папоротник.
Основная заключается в том, чтобы, зафиксировав какую-либо начальную точку, затем циклически совершать афинное преобразование системы координат, в которой строится точка.То есть, если на определённом шаге цикла имеется точка А с координатами (х0,y0), то при следующей итерации цикла изображается точка В, с координатами:
( а*х0+в*y0+с , d*х0+e*y0+f ).
Таким образом получаем новую систему координат: точку В через "старую" точку А.
Для прорисовки фрактала следует нажать кнопку "Fern"
Код программы:
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls; type { TForm1 } TForm1 = class(TForm) Fern: TButton; PaintBox1: TPaintBox; procedure FernClick(Sender: TObject); procedure DrawFern(); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.FernClick(Sender: TObject); begin PaintBox1.Canvas.Brush.Color := RGBToColor(0,0,0); PaintBox1.Canvas.Rectangle(0,0, PaintBox1.Width, PaintBox1.Height);//заливка фона DrawFern(); end; procedure TForm1.DrawFern(); const iter = 400000; //Количество итераций var t, x, y: Real; p: Real; k: LongInt; Mx, My, r: Integer; begin Mx := PaintBox1.Width div 2; //определение координаты x My := PaintBox1.Height-40; //определение координаты у r:= trunc(0.1*My); Randomize; x:=1.0; y:=0.0; for k := 1 to iter do begin p:=Random; t:=x; if p <= 0.85 then //построение верхней части begin x:=0.84*x-0.045*y; y:=0.045*t+0.86*y+1.6; end else if p <= 0.92 then //построение левого листа begin x:=0.25*x-0.26*y; y:=0.23*t+0.25*y+1.6; end //построение правого листа else if p <= 0.99 then begin x:=-0.135*x+0.28*y; y:=0.26*t+0.245*y+0.44; end else begin //построение стебля x:=0.0; y:=0.16*y; end; PaintBox1.Canvas.Pixels[Mx+Round(r*x), My-Round(r*y)+35]:=RGBToColor(0, 255, 150); end end; end.
Прикрепленный файл | Размер |
---|---|
Paporotnik.rar | 872.77 кб |