Instrukcja 5

Cel ćwiczenia : Napisanie aplikacji rysującej wykres funkcji kwadratowej.

0x01 graphic

Rys. 1 Widok formularza z umieszczonymi komponentami

  1. Uruchomić Delphi.

  1. Przejść do widoku kodu źródłowego przyciskiem F12.

  1. W części Interface (pod uses) umieścić następujący kod:

const Nmax = 10000;

ppX=25;

ppY=25;

type

wym = 1..Nmax;

TablWsp = Array[wym] of Real;

  1. W części private klasy TForm1 umieścić deklaracje zmiennych i nagłówki funkcji Normalizacja i Osie:

N,X0,Y0,ZX,ZY: Integer;

dx,xmin,xmax: Real;

xx,yy,X,Y: TablWsp;

a,b,c:double;

kolW,kolO,kolWyp : TColor;

procedure Normalizacja(N,A,B: Integer; xx,yy: TablWsp;

var X,Y: TablWsp);

procedure Osie(X0,Y0,A,B: Integer; x,y: String;T: TCanvas);

  1. W części implementation napisać definicje funkcji:

procedure TForm1.Normalizacja;

var

i: Integer;

dX,dY,G,Kx,Ky,xmin,xmax,ymin,ymax,Sx,Sy: Real;

begin

A:=A-2*ppx; B:=B-2*ppY;

xmin:=xx[1]; xmax:=xx[1];

ymin:=yy[1]; ymax:=yy[1];

for i:=2 to N do begin

if xx[i] < xmin then xmin:=xx[i];

if xx[i] > xmax then xmax:=xx[i];

if yy[i] < ymin then ymin:=yy[i];

if yy[i] > ymax then ymax:=yy[i];

end;

Sx:=xmax-xmin;

Sy:=ymax-ymin;

for i:=1 to N do begin

X[i]:=xx[i]-xmin;

Y[i]:=Abs(yy[i]-ymin-Sy);

end;

G:=1;

dX:=A-Sx;

dY:=B-Sy;

if dX/A <= dY/B then begin

Kx:=A/Sx;

Ky:=G*Kx;

end

else begin

Ky:=B/Sy;

Kx:=Ky/G

end;

for i:=1 to N do begin

X[i]:=Kx*X[i]+ppX;

Y[i]:=Ky*Y[i]+ppY;

end;

end;

procedure TForm1.Osie;

begin

with T do begin

MoveTo(0,Y0);

LineTo(A,Y0);

LineTo(A-8,Y0-3);

LineTo(A,Y0);

LineTo(A-8,Y0+3);

TexTout(A-15,Y0+6,x);

MoveTo(X0,B);

LineTo(X0,0);

LineTo(X0-3,8);

MoveTo(X0,0);

LineTo(X0+3,8);

TextOut(X0-11,9,y);

end;

end;

  1. Umieścić na formularzu komponent Image i ustawić następujące parametry:

  1. Umieścić na formatce komponent Button i ustawić własność Caption na Rysuj.

  1. Umieścić na formatce 6 komponentów Edit i ustawić parametry według następujących wskazówek:

Domyslna nazwa:

Zmienić własność name na:

Zmienić własność tekst na:

Edit1

EN

50

Edit2

Exmin

-1,5

Edit3

Exmax

1,5

Edit4

Ea

1

Edit5

Eb

1

Edit6

Ec

1

  1. Obok komponentów Edit można umieścić komponenty Label w celu opisania, który komponent odpowiada za poszczególne zmienne.

  1. Wygenerować zdarzenie OnClick dla komponentu Buton i wpisać następujący kod:

procedure TForm1.Button1Click(Sender: TObject);

var

i:integer;

begin

N:=StrToInt(EN.Text);

xmin:=StrToFloat(Exmin.Text);

xmax:=StrToFloat(Exmax.Text);

a:=StrToFloat(Ea.Text);

b:=StrToFloat(Eb.Text);

c:=StrToFloat(Ec.Text);

with Image1.Canvas do begin

//czyszczenie okna

Brush.Color:=kolWyp;

Brush.Style:=bsSolid;

FillRect(Rect(0,0,Image1.Width,Image1.Height));

//wykres

xx[1]:=0; yy[1]:=0;

dx:=(xmax-xmin)/N;

for i:=0 to N do begin

xx[i+2]:=xmin+i*dx;

yy[i+2]:=a*xx[i+2]*xx[i+2]+b*xx[i+2]+c;

end;

ZX:=Image1.Width; ZY:=Image1.Height;

Normalizacja(N+2,Image1.Width,Image1.Height,xx,yy,X,Y);

X0:=Round(X[1]); Y0:=Round(Y[1]);

Pen.Color:=kolO;

Osie(X0,Y0,ZX,ZY,'x','y',Image1.Canvas);

Pen.Color:=kolW;

MoveTo(Round(X[2]),Round(Y[2]));

for i:=3 to N+2 do

LineTo(Round(X[i]),Round(Y[i]));

end;

end;

  1. Wygenerować zdarzenie OnCreate dla komponentu Form1 i wpisać następujący kod:

procedure TForm1.FormCreate(Sender: TObject);

begin

kolW:=clBlack;

kolO:=clBlue;

kolWyp:=clWhite;

end;

  1. Umieścić komponenty: RadioGroup, Button, ColorDialog.

  2. Wybrać własność Items dla RadioGroup i wpisać następujące pozycje:

kolor wykresu

kolor osi

kolor wypełnienia

Własność ItemIndex dla RadioGroup1 ustawić na 0, natomiast własność Caption ustawić na pustą.

  1. Własność Caption dla przycisku Button ustawić na: Wybór koloru.

  1. Wygenerować zdarzenie OnClick dla przycisku i wpisać następujący kod odpowiedzialny za wybór koloru.

procedure TForm1.Button2Click(Sender: TObject);

begin

case RadioGroup1.ItemIndex of

0 : begin

if Colordialog1.Execute then

kolW:=ColorDialog1.Color;

end;

1 : begin

if Colordialog1.Execute then

kolO:=ColorDialog1.Color;

end;

2 : begin

if Colordialog1.Execute then

kolWyp:=ColorDialog1.Color;

end;

end;

end;

14. Skompilować i uruchomić program przyciskiem F9 na klawiaturze komputera.

0x01 graphic

Rys. 2 Uruchomiony program

5