10 strofoida, Instrukcja 10 Strofoida

background image

1

Instrukcja 10

Cel ćwiczenia : Napisanie aplikacji umożliwiającej rysowanie linii
przybliżających strofoidę.

Rys. 1 Widok formularza z umieszczonymi komponentami

1. Uruchomić Delphi.

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

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

const Nmax = 10000;
ppX=25;
ppY=25;
type
wym = 0..Nmax;
Tabl1 = Array[wym] of Real;


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

K,N,M,X1,Y1,ZX,ZY: Integer;

dx,dy,ds,fi,ro,sp: Real;
xw,yw,sw,px,py: Tabl1;
xx,yy,X,Y: Tabl1;

background image

2


procedure Normalizacja(N,A,B: Integer; xx,yy: Tabl1;
var X,Y: Tabl1);
procedure Osie(X0,Y0,A,B: Integer; x,y: String;T: TCanvas);
procedure Pochodne(N: Integer; x,y: Tabl1; var p: Tabl1);
procedure FunSklej1(N,i: Integer; xp: Real; var yp: Real;
x,y,p: Tabl1);
procedure Obrazek;

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

procedure TForm1.Obrazek;
var
i, j: Integer;
begin
with Image1.Canvas do begin
ds:=2*Pi/3/N;
for i:=0 to N do begin
fi:=-Pi/3+i*ds;
ro:=-Cos(2*fi)/Cos(fi);
xw[i]:=ro*Cos(fi);
yw[i]:=ro*Sin(fi);
xx[i+1]:=xw[i]; yy[i+1]:=yw[i];
if i=0 then
sw[0]:=0
else begin
dx:=xw[i]-xw[i-1];
dy:=yw[i]-yw[i-1];
sw[i]:=sw[i-1]+Sqrt(dx*dx+dy*dy);
end;
end;
ZX:=Image1.Width; ZY:=Image1.Height;
Normalizacja(N+1,ZX,ZY,xx,yy,X,Y);
for i:=1 to N+1 do begin
X1:=Round(X[i]);
Y1:=Round(Y[i]);
Ellipse(X1-3,Y1-3,X1+3,Y1+3);
end;
Pochodne(N,sw,xw,px);
Pochodne(N,sw,yw,py);
K:=2;
xx[1]:=0; yy[1]:=0;
xx[2]:=xw[0]; yy[2]:=yw[0];
for i:=1 to N do begin
ds:=(sw[i]-sw[i-1])/M;
for j:=1 to M do begin
K:=K+1;
sp:=sw[i-1]+j*ds;
FunSklej1(N,i,sp,xx[K],sw,xw,px);
FunSklej1(N,i,sp,yy[K],sw,yw,py);

background image

3

end;
end;
Normalizacja(K,ZX,ZY,xx,yy,X,Y);
X1:=Round(X[1]); Y1:=Round(Y[1]);
Osie(X1,Y1,ZX,ZY,'x','y',Image1.Canvas);
MoveTo(Round(X[2]),Round(Y[2]));
for i:=3 to K do
LineTo(Round(X[i]),Round(Y[i]));
end;
end;

procedure TForm1.Pochodne;
var
i: Integer;
h1,h2,dy1,dy2,mi,la: Real;
begin
for i:=1 to N-1 do begin
h1:=x[i]-x[i-1];
h2:=x[i+1]-x[i];
dy1:=y[i]-y[i-1];
dy2:=y[i+1]-y[i];
mi:=h1/(h1+h2);
la:=1-mi;
p[i]:=la*dy1/h1+mi*dy2/h2;
if i=1 then p[0]:=(1+mi)*dy1/h1-mi*dy2/h2;
if i=N-1 then p[N]:=-la*dy1/h1+(1+la)*dy2/h2;
end;
end;

procedure TForm1.FunSklej1;
var
A,B,h,t,dy: Real;
begin
h:=x[i]-x[i-1];
t:=(xp-x[i-1])/h;
dy:=y[i]-y[i-1];
A:=-2*dy/h+(p[i-1]+p[i]);
B:=-A+dy/h-p[i-1];
yp:=y[i-1]+(xp-x[i-1])*(p[i-1]+t*(B+t*A));
end;

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;

background image

4

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;

background image

5

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

• Width : 400
• Height : 400

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

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

Caption na Dane.

9. Umieścić na komponencie GroupBox1 2 komponenty 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

LEN

10

Liczba węzłów interpolacji - N:

LabeledEdit2

LEM

5

Liczba punktów dodatkowych - M:


10. 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));
N:=StrToInt(LEN.Text);
M:=StrToInt(LEM.Text);
Obrazek;
end;

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

background image

6

Rys. 2 Uruchomiony program


Wyszukiwarka

Podobne podstrony:
10 strofoida Instrukcja 10, Strofoida
Sprawozdanie 10, Semestr 1, Elektronika, Sprawozdania i instrukcje, sprawozdanie rejestry scalone
10 0 1 2 Class?tivity What would happen if Instructions
instrukcja bhp przy magazynowan Nieznany (10)
Instrukcja do zad proj 10 Podstawowe funkcje logiczne z z
Junak M 10 Instrukcja Naprawy
10 9 Oświadczenie pracownika o odbyciu szkolenia wstępnego – instruktażu ogólnego
cw 10 instrukcja do moska Whe Nieznany
Lab 6, 10.2.2.8 Packet Tracer - DNS and DHCP Instructions
regulamin porzdkowy, Studia PWr W-10 MBM, Semestr VI, CNC, Laboratorium instrukcje
Cwiczenie 10 instrukcja
automat schodowy asp 10 instrukcja pl
11 10 Oświadczenie pracownika o odbyciu szkolenia wstępnego – instruktażu stanowiskowego
Instrumenty pochodne (10 stron) 5SJHGGIOTRXHZFBBTPMS2XVQYODPNLVVMJCHQHI
lab 13, 9.2.1.10 Packet Tracer Configuring Standard ACLs Instructions
instrukcja 10 id 215506 Nieznany
Instrukcja 10 charakterystyka kryzy

więcej podobnych podstron