Построение изображения листа папоротника при помощи фракталов. Лист папоротника - один из тех объектов, которые удобно строить при помощи вероятностных распределений. Основная идея этого метода заключается в том, чтобы, зафиксировав какую-либо начальную точку, далее циклически совершать афинное преобразование системы координат,в которой точка строится.То есть, если на определённом шаге цикла имеется точка точка А с координатами (х0,y0), то при следующей итерации цикла изображается точка В, чьи координаты имеют вид ( а*х0+в*y0+с , d*х0+e*y0+f ). Таким образом наблюдается явное выражение "новой" системы координат(точка В) через "старую"(точка А). unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, Buttons, ExtCtrls; type { TForm1 } TForm1 = class(TForm) BitBtn1: TBitBtn; PaintBox1: TPaintBox; procedure BitBtn1Click(Sender: TObject); procedure draw(); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation { TForm1 } procedure TForm1.BitBtn1Click(Sender: TObject); begin draw(); end; procedure Tform1.draw(); const iterations = 50000; //Кол-во итераций var t, x, y: real; p: real;//CЛУЧАЙНАЯ ВЕЛИЧИНА k: longint; mid_x, mid_y, radius: integer; begin mid_x := paintbox1.width div 2; mid_y := paintbox1.height -100 ; radius := trunc(0.1 * mid_y); randomize; x := 1.0; y := 0.0; for k := 1 to iterations 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[mid_x+round(radius*x), mid_y-round(radius*y)+35]:=clGreen end end; initialization {$I unit1.lrs} end.
Ключевые слова:
Фрактал. Папоротник
|
|||||||