Instrukcja 9 Przeksztalcenia obiektow plaskich


Instrukcja 9

Cel ćwiczenia : Napisanie aplikacji umożliwiającej tworzenie obrazu asteroidy (z efektem transformacji).

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;

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. 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);

  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;

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;

  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 komponent GroupBox z palety Standard i zmienić własność Caption na Dane.

  1. Umieścić na komponencie GroupBox1 8 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

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:

  1. 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.

0x01 graphic

Rys. 2 Uruchomiony program

1



Wyszukiwarka

Podobne podstrony:
Instrukcja 9 Przeksztalcenia obiektow plaskich
instrukcja alarmowa w obiektach usługowych, instrukcje BHP
Instrukcja budowy obiektów kubaturowych z pustaków styropianowych, BUDOWLANKA
Instrukcja obiekt dynamiczny matlab 2015
Temat 4 Wykonanie fotomapy terenu płaskiego metodą przekształcenia rzutowego w programie ILWISx
InstrukcjeĆw.2009 2010, Cw.1.E-01. Badanie właściwości elektrycznych kondensatora płaskiego, Laborat
iNSTRUKCJA BHP OBSŁUGI KRAJARKI PŁASKIEJ (GILOTYNA DO PAPIERU), BHP, Instrukcje BHP, Drukarnia
Przekształcenia instrukcja
Opis wyrównania sieci płaskiej z instrukcji WinKalk
Instrukcja, Oddziaływanie przekształtnika tyrystorowego na sieć
instrukcja do cw z prog obiektowego, Programowanie obiektowe, Sentenza
instrukcja bhp mycia i dezynfekcji pomieszczen urzadzen sprzetu i naczyn dla obiektow handlowych
instrukcja bhp dla placow cwiczen taktycznych oraz obiektow szkoleniowych
Zliczanie obiektow instrukcja
Obr Odśnieżanie płaskiego dachu, BHP, Instrukcje-Obrazki
Obr Bhp praca na dachu płaskim, BHP, Instrukcje-Obrazki

więcej podobnych podstron