unit Unit0; { 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; 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; const N : integer = 1239; M : integer = 360; d : integer = 2; var invoer : TextFile; k,i,j : integer; x,y : array of double; mu_x,mu_y : double; s_xx,s_yy,s_xy : double; det,a_x,a_y,b_x,b_y : double; t,p,q : double; begin SetLength(x,N); SetLength(y,N); Assign(invoer,'data.txt'); Reset(invoer); k := 0; while not EoF(invoer) do begin Readln(invoer,x[k],y[k]); k := k + 1; end; Close(invoer); Form1.Image1.Canvas.Pen.Color := clBlack; for k := 0 to N-1 do begin i := x2i(x[k]); j := y2j(y[k]); Form1.Image1.Canvas.Ellipse(i-d,j-d,i+d,j+d); end; mu_x := 0; mu_y := 0; for k := 0 to N-1 do begin mu_x := mu_x + x[k]; mu_y := mu_y + y[k]; end; mu_x := mu_x/N; mu_y := mu_y/N; Form1.Image1.Canvas.Pen.Color := clRed; Form1.Image1.Canvas.Pen.Width := 2; i := x2i(mu_x); j := y2j(mu_y); Form1.Image1.Canvas.Ellipse(i-d,j-d,i+d,j+d); s_xx := 0; s_yy := 0; s_xy := 0; for k := 0 to N-1 do begin s_xx := s_xx + sqr(x[k]-mu_x); s_yy := s_yy + sqr(y[k]-mu_y); s_xy := s_xy + (x[k]-mu_x)*(y[k]-mu_y); end; s_xx := 2*s_xx/N; s_yy := 2*s_yy/N; s_xy := 2*s_xy/N; a_x := sqrt(s_xx); a_y := 0; det := s_xx*s_yy-sqr(s_xy); b_x := s_xy/sqrt(s_xx); b_y := sqrt(det/s_xx); p := mu_x + a_x; q := mu_y + b_x; Form1.Image1.Canvas.MoveTo(x2i(p),y2j(q)); for k := 0 to M do begin t := k*Pi/180; p := mu_x + a_x*cos(t) + a_y*sin(t); q := mu_y + b_x*cos(t) + b_y*sin(t); Form1.Image1.Canvas.LineTo(x2i(p),y2j(q)); end; 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 := -3; xmax := 76; ymin := -3; ymax := 76; TV(Form1.Image1); ClearDevice; tekenen; Form1.Image1.Picture.SaveToFile('ellips.bmp'); end; END.