unit Unit0; { This software has been designed and is CopyLefted by Han de Bruijn (===) @-O^O-@ #/_\# ### All I ask is to be credited when it is appropriate. Main unit for Project0 ====================== } interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Grafisch, Math; 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} const N = 14; rij : array[0..N] of integer = { Star positions } ( 0, 30, 60, 90,120,135,150,165,180,210,240,270,300,330,360); hel : array[0..N] of integer = { Star luminosity } ( 10, 14, 18, 22, 26, 28, 30, 28, 26, 22, 18, 14, 10, 6, 10); { 0, 30, 60, 90,120,135,150,165,180,210,240,270,300,330,360} var x,y : array of double; tel : integer; beeld : array of array of double; max : double; procedure cirkel; { Coordinates of Circle } var k : integer; begin SetLength(x,N+1); SetLength(y,N+1); for k := 0 to N do begin x[k] := cos(rij[k]*Pi/180); y[k] := -sin(rij[k]*Pi/180); end; end; procedure Schetsen; { First picture } var i,j,k : integer; begin cirkel; for k := 0 to N do begin i := x2i(x[k]); j := y2j(y[k]); with Form1.Image1.Canvas do begin MoveTo(i,j); Brush.Color := Grijs(hel[k]/30); Pen.Color := Grijs(hel[k]/30); Ellipse(i-5,j-5,i+5,j+5); end; end; end; function P(r,d : double) : double; { Fuzzy Optics @ http://www.alternatievewiskunde.nl/MijnBoek/vaagzien.htm } begin P := d/(2*Pi*(r*r+d*d)*sqrt(r*r+d*d)); end; procedure starten(var sigma : double); { Determine Fuzzyness } var k : integer; alpha,hoek,dt : double; begin alpha := sqrt(2*ln(512)); hoek := 0; for k := 0 to N-1 do begin dt := (rij[k+1]-rij[k])*Pi/180; if dt > hoek then hoek := dt; end; sigma := 2*sin(hoek/2)/(2*Pi)*alpha*1.5; end; procedure VaagZien; { Second picture = fuzzyfication of first one } var i,j,k : integer; a,b,r,d : double; begin starten(d); max := 0; for k := 0 to N do begin for j := 0 to Hoog-1 do begin for i := 0 to Wijd-1 do begin a := i2x(i); b := j2y(j); r := sqrt((a-x[k])*(a-x[k])+(b-y[k])*(b-y[k])); beeld[i,j] := beeld[i,j] + hel[k]*P(r,d); if beeld[i,j] > max then max := beeld[i,j]; end; end; end; for i := 0 to Wijd-1 do for j := 0 to Hoog-1 do Form1.Image1.Canvas.Pixels[i,j] := Grijs(1-beeld[i,j]/max); end; procedure TForm1.Toetsdruk(Sender: TObject; var Key: Char); { On KeyPress } begin if tel = 0 then begin ClearDevice; Form1.Image1.Canvas.Pen.Width := 2; Form1.Image1.Canvas.Pen.Color := clBlack; Form1.Image1.Canvas.Brush.Color := clBlack; Schetsen; Form1.Image1.Picture.SaveToFile('BH1.bmp'); end; if tel = 1 then begin VaagZien; Form1.Image1.Picture.SaveToFile('BH2.bmp'); end; tel := tel+1; if tel = 2 then tel := 0; end; procedure TForm1.Scheppen(Sender: TObject); { On Create } var i,j : integer; begin xmin := -1.5; xmax := +1.5; ymin := -1.5; ymax := +1.5; TV(Form1.Image1); ClearDevice; tel := 0; SetLength(beeld,Wijd,Hoog); for i := 0 to Wijd-1 do for j := 0 to Hoog-1 do beeld[i,j] := 0; max := 0; end; end.