
Среда программирования:
Lazarus 1.0.6 win64
Статья по теме:
Ковёр Серпинского является двуxмерным аналогом канторовского множества исключенных средних третей. Строится ковер Серпинского следующим образом. Вначале берётся квадрат со стороной равной единице, затем каждая сторона квадрата делится на три равные части, а весь квадрат, соответственно, на девять одинаковых квадратиков со стороной равной . Из полученной фигуры вырезается центральный квадрат. Затем такой же процедуре подвергается каждый из 8 оставшихся квадратиков и т. д.
Код программы:
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 } procedure Serp( x1, y1, x2, y2: Real; n: Integer); public { public declarations } end; var Form1: TForm1; x1, y1, x2, y2, x3, y3: Double; implementation {$R *.lfm} { TForm1 } procedure TForm1.Serp(x1, y1, x2, y2: Real; n: Integer); var x1n, y1n, x2n, y2n: Real; begin if n > 0 then begin x1n := 2*x1/3 + x2 / 3; x2n := x1/3 + 2*x2 / 3; y1n := 2*y1/3 + y2 / 3; y2n := y1/3+2*y2 / 3; PaintBox1.canvas.Rectangle(Round(x1n), Round(y1n), Round(x2n), Round(y2n)); Serp(x1, y1, x1n, y1n, n-1); Serp(x1n, y1, x2n, y1n, n-1); Serp(x2n, y1, x2, y1n, n-1); Serp(x1, y1n, x1n, y2n, n-1); Serp(x2n, y1n, x2, y2n, n-1); Serp(x1, y2n, x1n, y2, n-1); Serp(x1n, y2n, x2n, y2, n-1); Serp(x2n, y2n, x2, y2, n-1) end end; procedure TForm1.Button1Click(Sender: TObject); begin paintbox1.canvas.Rectangle(20, 20, 460, 460); Serp(20, 20, 460, 460, 4); end; end.
Прикрепленный файл | Размер |
---|---|
Исходные коды и исполняемый файл | 762.95 кб |