_Цртање

15
1.4. Цртање на повеќеаголник и искршена линија -Повеќеаголник За цртање на повеќеаголник се користи фунцијата Polygon која како аргумент прима множество точки. Затоа треба да ја знаеме и фунцијата Point( X,Y) од тип TPoint со X,Y:integer со која се дефинира точка. За да добиеме n-аголник треба во фунцијата Polygon да дефинираме n-точки. Polygon([Point(X1,Y1),Point(X2,Y2),…,Point(Xn,Yn)]) Пример 1 . Цртање на петаголник. За да нацртаме петаголник потребни ни се 5 точки. Во код едиторот пишуваме. Canvas.PolyGon([Point(100,70), Point(170,70),Point(250,350),Point(150,320), Point(90,130)]); Со извршување на програмата добиваме: 1

Upload: angela-stojanoska

Post on 10-Nov-2014

26 views

Category:

Documents


6 download

DESCRIPTION

Цртање

TRANSCRIPT

Page 1: _Цртање

1.4. Цртање на повеќеаголник и искршена линија

-Повеќеаголник

За цртање на повеќеаголник се користи фунцијата Polygon која како аргумент прима

множество точки. Затоа треба да ја знаеме и фунцијата

Point( X,Y) од тип TPoint со X,Y:integer

со која се дефинира точка.

За да добиеме n-аголник треба во фунцијата Polygon да дефинираме n-точки.

Polygon([Point(X1,Y1),Point(X2,Y2),…,Point(Xn,Yn)])

Пример 1. Цртање на петаголник.

За да нацртаме петаголник потребни ни се 5 точки.

Во код едиторот пишуваме.

Canvas.PolyGon([Point(100,70), Point(170,70),Point(250,350),Point(150,320),

Point(90,130)]);

Со извршување на програмата добиваме:

1

Page 2: _Цртање

Ако сакаме да ја сменеме бојата на надворешната линија, како и бојата и стилот на

внатрешноста на петаголникот, кодот ќе биде следниот:

Canvas.Pen.Color:=ClLime;

Canvas.Brush.Color:=ClSkyBlue;

Canvas.Brush.Style:=bsDiagCross;

Canvas.PolyGon([Point(100,70), Point(170,70),Point(250,350),Point(150,320),

Point(90,130)]);

и добиваме:

Ако имаме низа од повеќе точки а ние сакаме повеќеаголник дефиниран само од

неколку,тогаш ја користиме функцијата

Slice(A,n) која ги зема првите n елементи од низата од точки A,

па за дефинирање на n-агилник ќе напишеме Polygon(Slice(A,n)).

Пример 2. Користење на функцијата Slice.

Дадена ни е низа од 6 произволни точки, но ние сакаме да нацртаме четириаголник.

Кодот ќе биде:

2

Page 3: _Цртање

procedure TForm1.FormClick(Sender: TObject);

var a: array[1..6] of Tpoint;

begin

a[1]:=Point(100,100);

a[2]:=Point(220,100);

a[3]:=Point(380,350);

a[4]:=Point(380,440);

a[5]:=Point(150,440);

a[6]:=Point(50,180);

Canvas.Polygon(Slice(a,4));

end;

па со извршување добиваме:

Ако сакаме да го гледаме и делот од шестаголникот со испрекинати линии и целата

фигура да биде во црвена боја кодот ќе биде:

procedure TForm1.FormClick(Sender: TObject);

var a: array[1..6] of Tpoint;

3

Page 4: _Цртање

begin

a[1]:=Point(100,100);

a[2]:=Point(220,100);

a[3]:=Point(380,350);

a[4]:=Point(380,440);

a[5]:=Point(150,440);

a[6]:=Point(50,180);

with canvas do

Begin

Pen.Color:=ClRed;

Pen.Style:=PsDot;

Polygon(a);

Pen.Style:=psSolid;

Polygon(Slice(a,4));

end;

end;

4

Page 5: _Цртање

-Искршена линија

За цртање на искршена линија се користи наредбата PolyLine што како аргументи

исто како кај PolyGon прима низа од точки.

PolyLine([Point(X1,Y1),Point(X2,Y2),…,Point(Xn,Yn)])

Повеќеаголник може да се нацрта и со помош на PolyLine. Така ако сакаме да

нацртаме n-аголник треба да го дефинираме со n+1 точка, при што последната точка треба

да биде всушност почетната точка. Всушност повеќеаголникот претставува затворена

исчршена линија каде последната и првата точка се поврзани.

PolyLine([Point(X1,Y1),Point(X2,Y2),…,Point(Xn,Yn),Point(X1,Y1)])

Пример 3. Цртање на искршена линија.

Сакаме да нацртаме искршена линија со 5 произволни точки.

Кодот ќе биде:

Canvas.PolyLine([Point(120,100),Point(210,60),Point(360,210),Point(200,300),Point

(100,180)]);

и со извршување добиваме:

Ако сакаме да добиеме затворена искршена линија кодот е:

5

Page 6: _Цртање

Canvas.PolyLine([Point(120,100),Point(210,60),Point(360,210),Point(200,300),

Point(100,180),Point(120,100)]); //ja dopisuvame prvata tocka na kraj

односно добиваме:

Како за PolyGon така и за PolyLine може да ја користиме функцијата Slice.

Пример 4. Користење на Slice во PolyLine.

Дадени ни се 7 произволни точки, но ние сакаме да нацртаме искршена линија

дефинирана од 5 точки. Сепак, сакаме да биде исцртана и остатокот од сикршената линија

од 7-те точки но со испрекината линија.

Кодот ќе биде:

procedure TForm1.FormClick(Sender: TObject);

var a: array[1..7] of TPoint;

6

Page 7: _Цртање

begin

a[1]:=Point(120,100);

a[2]:=Point(210,60);

a[3]:=Point(360,110);

a[4]:=Point(400,300);

a[5]:=Point(300,280);

a[6]:=Point(420,230);

a[7]:=Point(500,400);

with Canvas do

Begin

Pen.Style:=psDashDot; //stil na moliv crta-tocka

Polyline(a);

Pen.Style:=psSolid;

PolyLine(Slice(a,5));

end;

end;

Со извршување се добива:

7

Page 8: _Цртање

1.5. Вежби

Кога сакаме одново да нацртаме нешто на формата и да ни се избриши предходното,

тоа го правиме со наредбата Repaint односно внесуваме Form1.RePaint.

задача 1 . Цртање на дрво(елка) со PolyGon.

Решение:

procedure TForm1.FormClick(Sender: TObject);

begin

With Canvas do

Begin

Pen.Width:=1;

Pen.Color:=clGreen;

Brush.Color:=clGreen;

PolyGon([Point(350,90),Point(330,90),Point(400,160),Point(380,160),

Point(470,250),Point(130,250),Point(220,160),Point(200,160),

Point(270,90),Point(250,90),Point(300,40)]);

Pen.Color:=RGB(128,64,0);

Brush.Color:=RGB(128,64,0);

PolyGon([Point(350,251), Point(350,301), Point(250,301), Point(250,251)]);

end;

end;

8

Page 9: _Цртање

задача 2 . Цртање на ѕвезда со PolyLine.

Сакаме да нацртаме ѕвезда со 5 краци во жолта боја.

Решение:

procedure TForm1.FormClick(Sender: TObject);

begin

Canvas.Pen.Color := clYellow;

Canvas.Polyline([Point(40, 10), Point(20, 60), Point(70, 30),

Point(10, 30), Point(60, 60), Point(40, 10)]);

end;

9

Page 10: _Цртање

Дополнување на задача 4.

Доколку сакаме да нацртаме правилна ѕвезда во средината на формата кодот е:

procedure TForm1.FormClick(Sender: TObject);

var xc,yc,r:integer;

a: array[1..6] of TPoint;

begin

// Definirame koordinati na centar i dolzinata na radiusot na kruznicata koja ja

//opisuva zvezdata

xc:=ClientWidth div 2;

yc:=ClientHeight div 2;

r:=200;

//Gi definirame krajnite tocki na zvezdata

a[1]:=Point(Round(xc+r*cos(5*pi/10)),Round(yc-r*sin(5*pi/10)));

a[2]:=Point(Round(xc+r*cos(13*pi/10)),Round(yc-r*sin(13*pi/10)));

a[3]:=Point(Round(xc+r*cos(pi/10)),Round(yc-r*sin(pi/10)));

a[4]:=Point(Round(xc+r*cos(9*pi/10)),Round(yc-r*sin(9*pi/10)));

a[5]:=Point(Round(xc+r*cos(17*pi/10)),Round(yc-r*sin(17*pi/10)));

a[6]:=Point(Round(xc+r*cos(5*pi/10)),Round(yc-r*sin(5*pi/10)));

//Ja crtame zvezdata

10

Page 11: _Цртање

Canvas.PolyLine(a);

end;

Забелешка:

За обојување на краците мора да се употреби PolyGon, односно кодот би бил:

procedure TForm1.FormClick(Sender: TObject);

var xc,yc,r:integer;

a: array[1..5] of TPoint;

begin

xc:=ClientWidth div 2;

yc:=ClientHeight div 2;

r:=200;

a[1]:=Point(Round(xc+r*cos(5*pi/10)),Round(yc-r*sin(5*pi/10)));

a[2]:=Point(Round(xc+r*cos(13*pi/10)),Round(yc-r*sin(13*pi/10)));

a[3]:=Point(Round(xc+r*cos(pi/10)),Round(yc-r*sin(pi/10)));

a[4]:=Point(Round(xc+r*cos(9*pi/10)),Round(yc-r*sin(9*pi/10)));

a[5]:=Point(Round(xc+r*cos(17*pi/10)),Round(yc-r*sin(17*pi/10)));

Canvas.Brush.Color:=ClYellow;

11

Page 12: _Цртање

Canvas.PolyGon(a);

end;

12