Среда программирования:
Lazarus
Статья по теме:
Данная программа демонстрирует множество Мандельброта в случае fc(z)=z2+c (чаще всего используется именно этот вариант).
Построение выполняется на Canvas'e.
Запустив программу, необходимо нажать на кнопку(Button) "НАРИСОВАТЬ" на форме.
Код программы:
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; PaintBox1: TPaintBox; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); type TComplex = record x : Real; y : Real; end; const iter = 50; max = 16; var z, t, c : TComplex; x, y, n : Integer; Cancel : Boolean; gd, gm : Smallint; mx, my : Integer; col:TColor; begin PaintBox1.Canvas.Clear; //очищаем canvas Randomize; Mx := PaintBox1.Canvas.Width div 2; //определяем центр canvas'a по ширине My := PaintBox1.Canvas.Height div 2; //определяем центр canvas'a по высоте for y := -my to my do //идем по canvas'у с помощью двойного цикла for x := -mx to mx do begin //устанавливаем значения параметров n := 0; c.x := x * 0.005; c.y := y * 0.005; z.x := 0; z.y := 0; while (sqr(z.x) + sqr(z.y) < max) and (n < iter) do begin t := z; z.x := sqr(t.x) - sqr(t.y) + c.x; z.y := 2 * t.x * t.y+ c.y; Inc(n); end; //цвет выбирается по числу итераций if n < iter then begin col := n*6 mod 255; // находим цвет //перекрашиваем соответствующую точку на canvas'e в соответствующий цвет PaintBox1.Canvas.Pixels[mx+x,my+y]:=RGBToColor(0,col,0); end; end; end; end.
Прикрепленный файл | Размер |
---|---|
Исходный код и исполняемый файл | 683.5 кб |