_Цртање
DESCRIPTION
ЦртањеTRANSCRIPT
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
Ако сакаме да ја сменеме бојата на надворешната линија, како и бојата и стилот на
внатрешноста на петаголникот, кодот ќе биде следниот:
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
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
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
-Искршена линија
За цртање на искршена линија се користи наредбата 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
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
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
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
задача 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
Дополнување на задача 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
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
Canvas.PolyGon(a);
end;
12