Blame lazarus/fractal/unit1.pas

Ivan Mahonin ffaebc
unit Unit1;
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
{$mode objfpc}{$H+}
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
interface
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
uses
Ivan Mahonin ffaebc
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
type
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
  { TForm1 }
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
  TForm1 = class(TForm)
Ivan Mahonin ffaebc
    procedure FormPaint(Sender: TObject);
Ivan Mahonin ffaebc
  private
Ivan Mahonin ffaebc
    { private declarations }
Ivan Mahonin ffaebc
  public
Ivan Mahonin ffaebc
    { public declarations }
Ivan Mahonin ffaebc
  end;
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
var
Ivan Mahonin ffaebc
  Form1: TForm1;
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
implementation
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
{$R *.lfm}
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
procedure Line(x1, y1, x2, y2: single);
Ivan Mahonin ffaebc
begin
Ivan Mahonin ffaebc
  Form1.Canvas.MoveTo(round(x1), round(y1));
Ivan Mahonin ffaebc
  Form1.Canvas.LineTo(round(x2), round(y2));
Ivan Mahonin ffaebc
end;
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
procedure Figure(x1, y1, x2, y2: single; level: integer);
Ivan Mahonin ffaebc
var
Ivan Mahonin ffaebc
  ax, ay, bx, by, cx, cy: single;
Ivan Mahonin ffaebc
begin
Ivan Mahonin 668467
  if level < 5 then begin
Ivan Mahonin ffaebc
    ax := (x2 - x1)/3 + x1;
Ivan Mahonin ffaebc
    ay := (y2 - y1)/3 + y1;
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
    cx := (x1 - x2)/3 + x2;
Ivan Mahonin ffaebc
    cy := (y1 - y2)/3 + y2;
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
    bx := (ax + cx)/2 + (cy - ay)*sin(60/180*pi);
Ivan Mahonin ffaebc
    by := (ay + cy)/2 - (cx - ax)*sin(60/180*pi);
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
    Figure(x1, y1, ax, ay, level+1);
Ivan Mahonin ffaebc
    Figure(ax, ay, bx, by, level+1);
Ivan Mahonin ffaebc
    Figure(bx, by, cx, cy, level+1);
Ivan Mahonin ffaebc
    Figure(cx, cy, x2, y2, level+1);
Ivan Mahonin ffaebc
  end else begin
Ivan Mahonin ffaebc
    Line(x1, y1, x2, y2);
Ivan Mahonin ffaebc
  end;
Ivan Mahonin ffaebc
end;
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
{ TForm1 }
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
procedure TForm1.FormPaint(Sender: TObject);
Ivan Mahonin ffaebc
begin
Ivan Mahonin ffaebc
  Figure(100, 400, 500, 400, 0);
Ivan Mahonin ffaebc
end;
Ivan Mahonin ffaebc
Ivan Mahonin ffaebc
end.
Ivan Mahonin ffaebc