13 Szachownica, Instrukcja 13 Widok szachownicy

background image

1

Instrukcja 13

Cel ćwiczenia : Napisanie aplikacji wyświetlającej widok szachownicy
w perspektywie centralnej.

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 = 1..Nmax;
TablWsp = Array[wym] of Real;

type PointType= record x,y: Integer end;
Punkty = Array[1..1000] of PointType;

var
obrz,obry,a,be,ga,x0,y0,z0,xp,yp,zp: Real;
i,j,k,l,Xs,Ys,ZX,ZY: Integer;
xx,yy,zz,x,y: TablWsp;
pole: Punkty;

background image

2

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 Osie(X0,Y0,A,B: Integer; x,y: String;T: TCanvas);
procedure Obrazek;
procedure ObrazekObr;
procedure FillPoly(n: Integer; A: Punkty; T: Tcanvas);
procedure Rysuj;

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

6. Skopiować do katalogu projektu moduły: Obroty, Rzuty

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

8. Umieścić nazwy skopiowanych modułów w sekcji uses.

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

procedure TForm1.FillPoly;
var i,xsr,ysr: Integer;
xs,ys:real;
var P:Array[1..50] of TPoint;
begin
for i:=1 to n do begin
P[i].x:=A[i].x;
P[i].y:=A[i].y;
end;
T.Polygon(Slice(P,n));
end;

procedure TForm1.Obrazek;

background image

3

begin
for i:=0 to 8 do begin
xp:=40-10*i;
for j:=0 to 8 do begin
yp:=10*j-40;
k:=9*i+j+1;
xx[k]:=x0+xp;
yy[k]:=y0+yp;
zz[k]:=z0;
end;
end;
end;

procedure TForm1.ObrazekObr;
begin
with Form1.Image1.Canvas do begin
for k:=1 to 81 do begin
Obrot(xx[k],yy[k],ga,xp,yp);
xx[k]:=xp; yy[k]:=yp
end;
for k:=1 to 81 do begin
Obrot(zz[k],xx[k],be,zp,xp);
zz[k]:=zp; xx[k]:=xp
end;
for k:=0 to 81 do begin
RzutCentr(yp,zp,xx[k],yy[k],zz[k],a);
yy[k]:=yp; zz[k]:=zp
end;
xx[82]:=0; yy[82]:=0; zz[82]:=0;
ZX:=Image1.Width; ZY:=Image1.Height;
Normalizacja(82,ZX,ZY,yy,zz,x,y);
Xs:=Round(x[82]); Ys:=Round(y[82]);
Form1.Image1.Canvas.Pen.Color:=clBlue;
Osie(Xs,Ys,ZX,ZY,'y','z',Image1.Canvas);
Form1.Image1.Canvas.Pen.Color:=clBlack;
Form1.Image1.Canvas.Brush.Color:=clRed;
for j:=0 to 8 do begin
k:=9*j+1; l:=9*(j+1);
MoveTo(Round(x[k]),Round(y[k]));
LineTo(Round(x[l]),Round(y[l]));
end;
for i:=0 to 8 do begin
k:=i+1; l:=i+73;
MoveTo(Round(x[k]),Round(y[k]));
LineTo(Round(x[l]),Round(y[l]));
end;
for j:=1 to 8 do
for i:=1 to 8 do begin
k:=i+j;
pole[1].X:=Round(X[9*(j-1)+i]);

background image

4

pole[2].X:=Round(X[9*(j-1)+i+1]);
pole[3].X:=Round(X[9*j+i+1]);
pole[4].X:=Round(X[9*j+i]);
pole[5].X:=pole[1].X;
pole[1].Y:=Round(Y[9*(j-1)+i]);
pole[2].Y:=Round(Y[9*(j-1)+i+1]);
pole[3].Y:=Round(Y[9*j+i+1]);
pole[4].Y:=Round(Y[9*j+i]);
pole[5].Y:=pole[1].Y;
if k/2 = k div 2 then FillPoly(5,pole,Image1.Canvas);
end;
end;
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;
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;

background image

5

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.Rysuj;
begin
Form1.Image1.Canvas.Brush.Color:=clWhite;
Form1.Image1.Canvas.Brush.Style:=bsSolid;
Form1.Image1.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height));
x0:=StrToFloat(LEx0.Text);
y0:=StrToFloat(LEy0.Text);
z0:=StrToFloat(LEz0.Text);
be:=strtofloat(LEbeta.Text);
ga:=StrToFloat(LEgamma.Text);
a :=StrToFloat(LEa.Text);

Obrazek;

ObrazekObr;
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 6 komponentów LabeledEdit z palety

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

background image

6

Domyslna

nazwa:

Zmienić

własność
name na:

Zmienić

własność tekst

na:

Zmienić własność

EditLabel->Caption na:

LabeledEdit1

LEx0

0

Położenie środka - x0:

LabeledEdit2

LEy0

0

Położenie środka - y0:

LabeledEdit3

LEz0

0

Położenie środka - z0:

LabeledEdit4

LEbeta

30

Kąt obrotu wokół osi y - beta:

LabeledEdit5

LEgamma

0

Kat obrotu wokół osi z - gamma:

LabeledEdit6

LEa

50

Położenie środka rzutów - a:


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

procedure TForm1.Button1Click(Sender: TObject);
begin
Rysuj;
end;

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

Rys. 2 Uruchomiony program


Wyszukiwarka

Podobne podstrony:
13 Szachownica, Instrukcja 13 - Widok szachownicy
Instrukcja do zad proj 13 Uklad sterowania schodow ruchom
Instrukcja 13 Elementy czasowe i liczniki pne
[lekcja 13] Instrukcja warunkowa if else Kurs C++ » Poziom 1
13-in.postęp. na wyp. powst. pożaru, Instrukcje BHP, XIX - P.POŻ
LAB instrukcje, Ćwiczenie 13, Przebieg _wiczenia:
13. Miareczkowanie amperometryczne, Technologia Chemiczna, Rok III, Semestr II, Instrumentalne metod
CZ 2 rozdział 9 13 strE 78 Uslugi i instrumenty rynku pracy
Informatyka - instrukcje, Instrukcja 13, Podstawy Informatyki - Laboratorium
lab 13, 9.2.1.10 Packet Tracer Configuring Standard ACLs Instructions
Instrukcja Obsługi Indesit BAAN 13 PX
13.Instrukcja mycia drobnego sprzętu, Haccp-Dokumentacja-przykład
ARKUSZ AKTUALIZACYJNY [ 13 ], BEZPIECZEŃSTWO I HIGIENA PRACY, INSTRUKCJA BEZPIECZEŃSTWA POŻAROWEG
13 Rybka instrukcja i zdjęcie
13-OBSŁ. MŁYNKA DO TARTEJ BUŁKI TYP - ZM 09, Instrukcje BHP, XX - PIEKARNICTWO I CUKIERNICTWO
13-strugarka-wyrówniarka, Instrukcje BHP, XXVI - STOLARNIA
13-obsługa maszyn i urządzeń, Instrukcje BHP, XVI - OBRÓBKA

więcej podobnych podstron