13 Szachownica, Instrukcja 13 - Widok szachownicy


Instrukcja 13

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

0x01 graphic

Rys. 1 Widok formularza z umieszczonymi komponentami

  1. Uruchomić Delphi.

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

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

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

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

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

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

0x01 graphic

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

0x01 graphic

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

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

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;

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;

  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 6 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

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:

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

0x01 graphic

Rys. 2 Uruchomiony program

6



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