Instrukcja 9 Przeksztalcenia obiektow plaskich


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 drewna
Instrukcja obiekt dynamiczny matlab 15
instrukcja bhp mycia i dezynfekcji pomieszczen urzadzen sprzetu i naczyn dla obiektow handlowych
lower,urządzenia obiektowe automatyki,Przeksztalcenia automatów
instrukcja przeciwpozarowa dla obiektow uslugowych
instrukcja bhp przy obsludze krajarki plaskiej gilotyny do papieru
instrukcja bhp dla placow cwiczen taktycznych oraz obiektow szkoleniowych
Zliczanie obiektow instrukcja
instrukcja prezentacja2
instrukcja bhp przy obsludze euro grilla
DS1000PL Instrukcja
Blaupunkt CR5WH Alarm Clock Radio instrukcja EN i PL
Instrukcja do cwiczenia 4 Pomiary oscyloskopowe
Instrukcja F (2010)

więcej podobnych podstron