unit Unit4; { This software has been designed and it is CopyLefted by Han de Bruijn: (===) @-O^O-@ #/_\# ### http://www.alternatievewiskunde.nl/kammen/proper.htm One-dimensional analogy of DTFE ------------------------------- } INTERFACE uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Math, Grafisch; type TForm1 = class(TForm) Image1: TImage; procedure Toetsdruk(Sender: TObject; var Key: Char); procedure Scheppen(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; IMPLEMENTATION {$R *.dfm} procedure Tekenen(N : integer); { Calculate and Draw } var k : integer; x,y,max,x1,x2,d : double; rij : array of double; begin { Sample density } Setlength(rij,N); d := 1/tan((1/2-1/(N+1))*Pi); Form1.Image1.Canvas.Brush.Color := clBlack; for k := 0 to N-1 do begin rij[k] := d*tan(((k+1)/(N+1)-1/2)*Pi); Writeln(rij[k]); x := rij[k]; with Form1.Image1.Canvas do Ellipse(x2i(x)-3,y2j(0)-3,x2i(x)+3,y2j(0)+3); end; Form1.Image1.Canvas.MoveTo(x2i(xmin),y2j(0)); Form1.Image1.Canvas.LineTo(x2i(xmax),y2j(0)); { Exact } Form1.Image1.Canvas.Pen.Color := clBlack; Form1.Image1.Canvas.MoveTo(x2i(xmin-3),y2j(0)); for k := 0 to Wijd-1 do begin x := i2x(k); y := 1/(1+sqr(x/d)); Form1.Image1.Canvas.LineTo(k,y2j(y)); end; { Voronoi 1-D } max := 0; Form1.Image1.Canvas.Pen.Color := clGreen; for k := 0 to N-3 do begin y := 2/(rij[k+2]-rij[k]); if y > max then max := y; end; for k := 0 to N-3 do begin x1 := (rij[k]+rij[k+1])/2; x2 := (rij[k+1]+rij[k+2])/2; y := 2/(rij[k+2]-rij[k])/max; { Histogram } with Form1.Image1.Canvas do begin MoveTo(x2i(x1),y2j(0)); LineTo(x2i(x1),y2j(y)); LineTo(x2i(x2),y2j(y)); LineTo(x2i(x2),y2j(0)); end; end; { Delaunay 1-D } Form1.Image1.Canvas.Pen.Color := clRed; x := rij[0]; y := 0; Form1.Image1.Canvas.MoveTo(x2i(x),y2j(y)); for k := 0 to N-3 do begin x := rij[k+1]; y := 2/(rij[k+2]-rij[k])/max; Form1.Image1.Canvas.LineTo(x2i(x),y2j(y)); end; x := rij[N-1]; y := 0; Form1.Image1.Canvas.LineTo(x2i(x),y2j(y)); { Delaunay alternative } Form1.Image1.Canvas.Pen.Color := clMaroon; k := 0; x := rij[k+1]; y := 2/(rij[k+2]-rij[k])/max; Form1.Image1.Canvas.MoveTo(x2i(x),y2j(y)); x := rij[k]; y := 2/(rij[k+1]-rij[k])/max; Form1.Image1.Canvas.LineTo(x2i(x),y2j(y)); k := N-3; x := rij[k+1]; y := 2/(rij[k+2]-rij[k])/max; Form1.Image1.Canvas.MoveTo(x2i(x),y2j(y)); k := N; x := rij[k-1]; y := 2/(rij[k-1]-rij[k-2])/max; Form1.Image1.Canvas.LineTo(x2i(x),y2j(y)); end; procedure TForm1.Toetsdruk(Sender: TObject; var Key: Char); { On KeyPress } begin Exit; end; procedure TForm1.Scheppen(Sender: TObject); { At moment of creation } begin xmin := -1.01; xmax := +1.01; ymin := -0.1; ymax := 1.1; TV(Form1.Image1); ClearDevice; Tekenen(16); Form1.Image1.Picture.SaveToFile('eendim.bmp'); end; END.