14 Powierzchnie funkcyjne, Instrukcja 14 Powierzchnie funkcyjne

background image

1

Instrukcja 14

Cel ćwiczenia : Napisanie aplikacji umożliwiającej wizualizację powierzchni
określonych funkcją dwóch zmiennych.

Rys. 1 Widok formularza z umieszczonymi komponentami

1. Uruchomić Delphi.

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

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


const Nmax = 10000;
type
wym = 0..Nmax;
TablWsp = Array[wym] of Real;

var
i,j,r,K,L,Nx,Ny,P,X0,Y0,ZX,ZY: Integer;
a,b,c,delta,epsilon,xmin,xmax,ymin,ymax,
dx1,dy1,dx2,dy2,xp,yp,zp: Real;
xx,yy,zz,X,Y: TablWsp;


4. W części private klasy TForm1 umieścić nagłówki funkcji:

procedure Normalizacja(N,A,B: Integer; xx,yy: TablWsp;
var X,Y: TablWsp);
procedure Obrazek;

5. Zapisać projekt za pomocą opcji: File->Save Project As w wybranym katalogu.

background image

2


6. Skopiować do katalogu projektu moduł Rzuty.

7. Dodać skopiowany moduł do projektu za pomocą opcji Project->Add to Project.

8. Umieścić nazwę skopiowanego modułu w sekcji uses.

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

procedure TForm1.Normalizacja;
const
ppX=25;
ppY=25;
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

background image

3

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.Obrazek;
begin
with Image1.Canvas do begin
if RBfun1.Checked then begin
xmin:=-1.5; xmax:=1.5;
ymin:=-1.5; ymax:=1.5;
end;
if RBfun2.Checked then begin
xmin:=-Pi; xmax:=Pi;
ymin:=-Pi; ymax:=Pi;
end;
dx1:=(xmax-xmin)/K;
dy1:=(ymax-ymin)/L;
dx2:=(xmax-xmin)/Nx;
dy2:=(ymax-ymin)/Ny;
P:=0;
for i:=0 to K do begin
xp:=xmin+i*dx1;
for j:=0 to Ny do begin
yp:=ymin+j*dy2;
P:=P+1; xx[P]:=xp; yy[P]:=yp;
if RBfun1.Checked then
zz[P]:=a*Exp(-b*(xp*xp+yp*yp))
else
zz[P]:=Sin(c*Sqrt(xp*xp+yp*yp));
end;
end;
for j:=0 to L do begin
yp:=ymin+j*dy1;

for i:=0 to Nx do begin

xp:=xmin+i*dx2;

P:=P+1; xx[P]:=xp; yy[P]:=yp;
if RBfun1.Checked then
zz[P]:=a*Exp(-b*(xp*xp+yp*yp))

else

zz[P]:=Sin(c*Sqrt(xp*xp+yp*yp));
end;
end;
for r:=1 to P do begin
RzutAkson(yp,zp,xx[r],yy[r],zz[r],delta,epsilon);

background image

4

yy[r]:=yp; zz[r]:=zp

end;
xx[P+1]:=0; yy[P+1]:=0; zz[P+1]:=0;
ZX:=Image1.Width; ZY:=Image1.Height;
Normalizacja(P+1,ZX,ZY,yy,zz,X,Y);
X0:=Round(X[P+1]); Y0:=Round(Y[P+1]);
r:=0;
for i:=0 to K do begin
r:=r+1;
MoveTo(Round(X[r]),Round(Y[r]));
for j:=1 to Ny do begin
r:=r+1;
LineTo(Round(X[r]),Round(Y[r]));
end;
end;
for j:=0 to L do begin
r:=r+1;
MoveTo(Round(X[r]),Round(Y[r]));
for i:=1 to Nx do begin
r:=r+1;
LineTo(Round(X[r]),Round(Y[r]));
end;
end;
end;
end;

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

• Width : 400
• Height : 400

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

12. Umieścić na formatce komponent GroupBox z palety Standard i zmienić własność

Caption na Dane.

13. Umieścić na komponencie GroupBox1 9 komponentów LabeledEdit z palety

Additional i ustawić parametry według następujących wskazówek:

Domyslna

nazwa:

Zmienić

własność
name na:

Zmienić

własność tekst

na:

Zmienić własność

EditLabel->Caption na:

LabeledEdit1

LEa

1

Parametr a:

LabeledEdit2

LEb

1

Parametr b:

LabeledEdit3

LEc

1

Parametr c:

LabeledEdit4

LEK

15

Liczba linii K:

LabeledEdit5

LEL

15

Liczba linii L:

LabeledEdit6

LENx

50

L. punktów Nx:

LabeledEdit7

LENy

50

L. punktów Ny:

LabeledEdit8

LEdelta

30

Kąt rzutowania ukośnego - delta:

background image

5

LabeledEdit9

LEepsilon

-30

Kąt rzutowania ukośnego - epsilon:

14. Umieścić na komponencie GroupBox1 2 komponenty RadioButton i ustawić

parametry według następujących wskazówek:

Domyslna nazwa:

Zmienić własność name na:

Zmienić własność Caption na:

RadioButton1

RBfun1

Funkcja 1

RadioButton2

RBfun2

Funkcja 2


15. Dla komponentu RBfun1 własność Checked ustawic na True.

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

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Image1.Canvas.Brush.Color:=clWhite;
Form1.Image1.Canvas.Brush.Style:=bsSolid;
Form1.Image1.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height));

k:=StrToInt(LEK.Text);
l:=StrToInt(LEL.Text);
Nx:=StrToInt(LENx.Text);
Ny:=StrToInt(LENy.Text);
delta:=StrToFloat(LEdelta.Text);
epsilon:=StrToFloat(LEepsilon.Text);

if RBfun1.Checked then begin
a:=StrToFloat(LEa.Text);
b:=StrToFloat(LEb.Text);
end;
if RBfun2.Checked then
c:=StrToFloat(LEc.Text);

Obrazek;
end;

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

background image

6

Rys. 2 Uruchomiony program


Wyszukiwarka

Podobne podstrony:
14 Powierzchnie funkcyjne Instrukcja 14, Powierzchnie funkcyjne
Napięcie powierzchniowe 13 14, Biotechnologia i, Rok I, Fizyka i biofizyka
cw 14 - Wyznaczanie napięcia powierzchniowego cieczy za pomocą wagi torsyjnej, Sprawozdania jakieś,
Ćw 14-Wyznaczanie napięcia powierzchniowego cieczy za pomocą wagi torsyjnej
Geometria krzywych i powierzchni zestaw 14
pola powierzchni uzytkow w dzialce 14
14 Instrukcja obsługi BFZ
instrukcja (14)
Instrukcja 7b Krzywe funkcyjne
instrukcja bhp przy obsludze ko Nieznany (14)
instrukcja 7 14
Polityka spoleczna, polityka rodzinna jej instrumenty i instytucje (14 str), Polityka społeczna
algorytm trrorystyczny szk. [ 14 ], BEZPIECZEŃSTWO I HIGIENA PRACY, INSTRUKCJA BEZPIECZEŃSTWA POŻA
Instrukcja do ćwiczenia(14), ZESPÓŁ SZKÓŁ NR 9 im

więcej podobnych podstron