unit Unit8; { This software has been designed and it is CopyLefted by Han de Bruijn: (===) @-O^O-@ #/_\# ### } INTERFACE uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Grafisch, Contours; 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} type funktie = function(x,y : double) : double; function macht(x,y : double) : double; { x^y } begin macht := exp(y*ln(x)); end; function een(x,y : double) : double; begin een := macht(x,y)-y; end; function twee(x,y : double) : double; begin twee := macht(x,macht(x,y))-y; end; procedure randjes(beeld : TBitmap; i0,i1,j0,j1 : integer); { Clean up boundaries } begin with beeld.Canvas do begin Pen.Width := 2; Pen.Color := clWhite; MoveTo(i0,j0+1); LineTo(i1-1,j0+1); LineTo(i1-1,j1-1); LineTo(i0,j1-1); LineTo(i0,j0+1); end; end; procedure test(f : funktie); { Contouring } const grens : integer = 40; var i,j,k : integer; i0,i1,j0,j1,g : integer; x,y,min,max,nivo,ff : double; bewaar : array of array of double; O : Omtrekken; verf : TColor; begin SetLength(bewaar,Wijd,Hoog); O := Omtrekken.Create; O.Afmetingen(Wijd,Hoog); O.Scherm := Form1.Image1.Picture.Bitmap; i0 := x2i(0); i1 := x2i(exp(1/exp(1))); j0 := y2j(0); j1 := y2j(exp(1)); min := 10; max := -10; for j := j0+1 downto j1-1 do begin y := j2y(j); for i := i0+1 to i1-1 do begin x := i2x(i); ff := f(x,y); if ff > max then max := ff; if ff < min then min := ff; bewaar[i,j] := ff; end; end; Writeln(min,' < ',max); for g := 0 to grens do begin nivo := min + (g/grens)*(max-min); for j := j0+1 downto j1-1 do for i := i0+1 to i1-1 do O.funktie[i,j] := bewaar[i,j]-nivo; O.Rondom(false); verf := Grijs(g/grens); for k := 1 to O.Aantal do O.Schetsen(k,verf,1); end; for j := j0+1 downto j1-1 do for i := i0+1 to i1-1 do O.funktie[i,j] := bewaar[i,j]; O.Rondom(false); for k := 1 to O.Aantal do O.Schetsen(k,clBlack,2); randjes(O.Scherm,i0,i1,j0,j1); end; procedure TForm1.Toetsdruk(Sender: TObject; var Key: Char); { On KeyPress } begin { ClearDevice; test(een); } end; procedure TForm1.Scheppen(Sender: TObject); { At moment of creation } begin xmin := -0.1; xmax := exp(1/exp(1))+0.1; ymin := -0.1; ymax := exp(1)+0.1; TV(Form1.Image1); ClearDevice; test(twee); Form1.Image1.Picture.SaveToFile('project8.bmp'); end; END.