unit Unit9; { This software has been designed and is CopyLefted by Han de Bruijn: (===) @-O^O-@ #/_\# ### } interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Grafisch; type TForm1 = class(TForm) Image1: TImage; procedure Scheppen(Sender: TObject); procedure Toetsdruk(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var keer : integer; var x,y,D : array[1..4] of double; procedure Tekst(nr : integer); { Display Enumerations } var Ox,Oy : integer; begin with Form1.Image1.Canvas do begin Ox := PenPos.x; Oy := PenPos.y; TextOut(Ox,Oy,IntToStr(nr)); MoveTo(Ox,Oy); end; end; procedure Parabool; { Draw Parabola } var Ad,Bd,Cd : double; Ax,Bx,Cx,Dx : double; Ay,By,Cy,Dy : double; a_x,a_y,v_x,v_y,s_x,s_y : double; p,q,t : double; k : integer; begin Ax := (+x[1]+x[2]+x[3]+x[4])/4; Bx := (-x[1]+x[2]-x[3]+x[4])/2; Cx := (-x[1]-x[2]+x[3]+x[4])/2; Dx := (+x[1]-x[2]-x[3]+x[4]); Ay := (+y[1]+y[2]+y[3]+y[4])/4; By := (-y[1]+y[2]-y[3]+y[4])/2; Cy := (-y[1]-y[2]+y[3]+y[4])/2; Dy := (+y[1]-y[2]-y[3]+y[4]); Ad := (+D[1]+D[2]+D[3]+D[4])/4; Bd := (-D[1]+D[2]-D[3]+D[4])/2; Cd := (-D[1]-D[2]+D[3]+D[4])/2; a_x := -Dx*Bd; a_y := -Dy*Bd; v_x := Cd*Bx-Cx*Bd-Dx*Ad; v_y := Cd*By-Cy*Bd-Dy*Ad; s_x := Cd*Ax-Cx*Ad; s_y := Cd*Ay-Cy*Ad; Form1.Image1.Canvas.Pen.Width := 4; Form1.Image1.Canvas.Pen.Color := clBlue; t := -1/2; p := (a_x*sqr(t)+v_x*t+s_x)/Cd; q := (a_y*sqr(t)+v_y*t+s_y)/Cd; Form1.Image1.Canvas.MoveTo(x2i(p),y2j(q)); for k := 1 to Wijd do begin t := k/Wijd-1/2; p := (a_x*sqr(t)+v_x*t+s_x)/Cd; q := (a_y*sqr(t)+v_y*t+s_y)/Cd; Form1.Image1.Canvas.LineTo(x2i(p),y2j(q)); end; end; procedure Tekenen; const eps : double = 0.02; var xi,eta,p,q : double; k,i,j,m,n : integer; nr : string[2]; begin for k := 1 to 4 do begin x[k] := Random-1/2; y[k] := Random-1/2; end; D[1] := (x[2]-x[1])*(y[3]-y[1])-(x[3]-x[1])*(y[2]-y[1]); D[2] := (x[2]-x[1])*(y[4]-y[2])-(x[4]-x[2])*(y[2]-y[1]); D[3] := (x[4]-x[3])*(y[3]-y[1])-(x[3]-x[1])*(y[4]-y[3]); D[4] := (x[4]-x[3])*(y[4]-y[2])-(x[4]-x[2])*(y[4]-y[3]); for j := 0 to Hoog do begin eta := j/Hoog-1/2; eta := 5*eta; { enlarged } for i := 0 to Wijd do begin xi := i/Wijd-1/2; xi := 5*xi; { enlarged } p := (1/2-xi)*(1/2-eta)*x[1] + (1/2+xi)*(1/2-eta)*x[2] + (1/2-xi)*(1/2+eta)*x[3] + (1/2+xi)*(1/2+eta)*x[4]; q := (1/2-xi)*(1/2-eta)*y[1] + (1/2+xi)*(1/2-eta)*y[2] + (1/2-xi)*(1/2+eta)*y[3] + (1/2+xi)*(1/2+eta)*y[4]; m := x2i(p); n := y2j(q); Form1.Image1.Canvas.Pixels[m,n] := clGray; end; end; Form1.Image1.Canvas.Pen.Width := 2; Form1.Image1.Canvas.Pen.Color := clBlack; Form1.Image1.Canvas.Moveto(x2i(x[1]),y2j(y[1])); Tekst(1); Form1.Image1.Canvas.Lineto(x2i(x[2]),y2j(y[2])); Tekst(2); Form1.Image1.Canvas.Lineto(x2i(x[4]),y2j(y[4])); Tekst(4); Form1.Image1.Canvas.Lineto(x2i(x[3]),y2j(y[3])); Tekst(3); Form1.Image1.Canvas.Lineto(x2i(x[1]),y2j(y[1])); Parabool; nr[1] := char((keer div 10)+byte('0')); nr[2] := char((keer mod 10)+byte('0')); Form1.Image1.Picture.SaveToFile('film\9P'+nr+'.bmp'); end; procedure TForm1.Scheppen(Sender: TObject); begin TV(Form1.Image1); ClearDevice; xmin := -0.6; xmax := +0.6; ymin := -0.6; ymax := +0.6; Form1.Image1.Canvas.Font.Size := 15; keer := 0; Tekenen; end; procedure TForm1.Toetsdruk(Sender: TObject; var Key: Char); begin ClearDevice; keer := keer + 1; Tekenen; end; end.