Instrukcja 9
Cel ćwiczenia : Napisanie aplikacji umożliwiającej tworzenie obrazu asteroidy
(z efektem transformacji).
Rys. 1 Widok formularza z umieszczonymi komponentami
1. Uruchomić Delphi.
2. Przejść do widoku kodu zró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 = 1..Nmax;
TablWsp = Array[wym] of Real;
var
alfa,xp,yp,xn,yn,kx,ky,dx,dy,kpx,kpy,c,s,r,th: Real;
i,X0,Y0,ZX,ZY: Integer;
xx,yy,X,Y: TablWsp;
1
4. W części private klasy TForm1 umieścić deklaracje zmiennych i nagłówki funkcji
Normalizacja, Osie, Obrot:
procedure Obrot(x,y,alfa: Real; var x1,y1: Real);
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);
5. 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
2
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;
procedure TForm1.Obrot;
var
t,c,s: Real;
begin
t:=Pi*alfa/180;
s:=Sin(t);
c:=Cos(t);
x1:=x*c-y*s;
y1:=x*s+y*c;
end;
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 8 komponentów LabeledEdit z palety
Additional i ustawić parametry według następujących wskazówek:
Domyslna Zmienić własność Zmienić własność Zmienić własność
nazwa: name na: tekst na: EditLabel->Caption na:
LabeledEdit1 LEr 50 Parametr - r:
LabeledEdit2 LEdx 100 Przesunięcie - dx:
LabeledEdit3 LEdy 50 Przesunięcie - dy:
LabeledEdit4 LEkx 2 Współczynnik skalowania - kx:
LabeledEdit5 LEky 3 Współczynnik skalowania - ky:
LabeledEdit6 LEalfa 60 Kąt obrotu - alfa:
LabeledEdit7 LEkpx 1,5 Współczynnik odkształcenia - kpx:
LabeledEdit8 LEkpy 1 Współczynnik odkształcenia - kpy:
3
10. Wygenerować zdarzenie OnClick dla komponentu Buton i wpisać następujący kod:
procedure TForm1.Button1Click(Sender: TObject);
begin
r:=StrToFloat(LEr.Text);
dx:=StrToFloat(LEdx.Text);
dy:=StrToFloat(LEdy.Text);
kx:=StrToFloat(LEkx.Text);
ky:=StrToFloat(LEky.Text);
alfa:=StrToFloat(LEalfa.Text);
kpx:=StrToFloat(LEkpx.Text);
kpy:=StrToFloat(LEkpy.Text);
with Image1.Canvas do begin
Brush.Color:=clWhite;
Brush.Style:=bsSolid;
FillRect(Rect(0,0,Image1.Width,Image1.Height));
for i:=1 to 360 do begin
th:=Pi*i/180;
s:=Sin(th); c:=Cos(th);
xp:=r*s*s*s; yp:=r*c*c*c;
xp:=xp+dx; yp:=yp+dy;
xp:=kx*xp; yp:=ky*yp;
Obrot(xp,yp,alfa,xn,yn);
xp:=xn+yn*kpx;
yp:=yn+xn*kpy;
xx[i+1]:=xp;
yy[i+1]:=yp
end;
xx[1]:=0; yy[1]:=0;
ZX:=Image1.Width; ZY:=Image1.Height;
Normalizacja(360,ZX,ZY,xx,yy,X,Y);
X0:=Round(X[1]); Y0:=Round(Y[1]);
Osie(X0,Y0,ZX,ZY,'x','y',Image1.Canvas);
MoveTo(Round(X[2]),Round(Y[2]));
for i:=2 to 360 do
LineTo(Round(X[i]),Round(Y[i]));
end;
end;
14. Skompilować i uruchomić program przyciskiem F9 na klawiaturze komputera.
4
Rys. 2 Uruchomiony program
5
Wyszukiwarka
Podobne podstrony:
instrukcja bhp przy obsludze szlifierki plaskiej do drewnaInstrukcja obiekt dynamiczny matlab 15instrukcja bhp mycia i dezynfekcji pomieszczen urzadzen sprzetu i naczyn dla obiektow handlowychlower,urządzenia obiektowe automatyki,Przeksztalcenia automatówinstrukcja przeciwpozarowa dla obiektow uslugowychinstrukcja bhp przy obsludze krajarki plaskiej gilotyny do papieruinstrukcja bhp dla placow cwiczen taktycznych oraz obiektow szkoleniowychZliczanie obiektow instrukcjainstrukcja prezentacja2instrukcja bhp przy obsludze euro grillaDS1000PL InstrukcjaBlaupunkt CR5WH Alarm Clock Radio instrukcja EN i PLInstrukcja do cwiczenia 4 Pomiary oscyloskopoweInstrukcja F (2010)więcej podobnych podstron