Ламана лінія

Метод polyline викреслює ламану лінію. Як параметр метод отримує масив типу TPoint. кожен елемент масиву представляє собою запис, поля х і у якій утримують координати точки перегину ламаної. Метод Polyline викреслює ламану лінію, послідовно поєднуючи прямими точки, координати яких знаходяться в масиві: першу з другою, другу з третьою, третю з четвертою і т. д.

Як приклад використання методу Polyline в лістингу 10.3 приведена процедура, яка виводить графік зміни деякої величини. Передбачається, що вихідні дані знаходяться в доступному процедурі масиві Data (тип Integer).

Лістинг 10.3. Графік функції (використання методу Polyline)

procedure TForml.Button1Click (Sender: TObject);

var
gr: array [1..50] of TPoint; // графік - ламана лінія

x0, y0: integer; // координати точки початку координат

dx, dy: integer; // крок координатної сітки по осях X і Y

i: integer; begin
х0 : = 10; у0: = 200; dx : = 5 ; dy: = 5;
// заповнимо масив gr

for i: = l to 50 do begin
gr [i] .x : = X0 + (i-l) * dx;
gr [i] .y : = Y0 - Data [i] * dy;

end;
// будуємо графік

with forml.Canvas do begin
MoveTo (x0, y0); LineTo (x0,10); // вісь Y
MoveTo (x0, y0); LineTo (200, y0); // вісь X
Polyline (gr); // графік
end;

end;

Метод Polyline можна використовувати для креслення замкнутих контурів. Для цього треба, щоб перший і останній елементи масиву містили координати однієї і тієї ж точки. В якості приклад використання методу Polybine для креслення замкнутого контуру в лістингу 10.4 приведена програма, яка на поверхні діалогового вікна, в точці натискання кнопки миші, викреслює контур п’ятикутної зірки (рис. 10.5). Колір, яким викреслюється зірка, залежить від того, яка з кнопок миші була натиснута. Процедура обробки натискання кнопки миші (подія MouseDown) викликає процедуру малювання зірки starLine і передає їй як параметр координати точки, в якій була натиснута кнопка. Зірку викреслює процедура starLine, яка в якості параметрів отримує координати центру зірки і полотно, на якому зірка повинна бути виведена. Спочатку обчислюються координати кінців і западин зірки, які записуються в масив р. Потім цей масив передається в якості параметра методу Polyline. При обчисленні координат променів і западин зірки використовуються функції sin і cos. Так як аргумент цих функцій має бути виражений в радіанах, то значення кута в градусах домножается на величину pi / 18о, де pi – це стандартна іменована константа рівна числу л.

Лістинг 10.4. Креслення замкнутого контуру (зірки) в точці натискання кнопки миші

unit Stars_; interface
uses
Windows, Messages, SysUtils, Variants, Classes,

Graphics, Controls, Forms, Dialogs, StdCtrls;

type
TForm1 = class (TForm)
procedure FormMouseDown (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);

private
{ Private declarations}

public
{ Public declarations}

end;
var
Forml: TForml;

implementation
f $ R * .dfm}
// викреслює зірку
procedure StarLine (x0, y0, r: integer; Canvas: TCanvas);

// x0, y0 - координати центру зірки
// r - радіус заїзди var
р : Array [1 .. 11] of TPoint;

// масив координат променів і западин

a: integer; // кут між віссю ОХ і прямий, що з'єднує
// центр зірки і кінець променя або западину i: integer;
begin
а : = 18; // будуємо від правого гір. променя

for i: = l to 10 do begin
if (i mod 2 = 0) then begin // западина
p [i] .x : = X0 + Round (r / 2 * cos (a * pi / 180));

p [i] .y: = y0-Round (r / 2 * sin (a * pi / 180));

end

else
begin // промінь
[i] .x: = x0 + Round (r * cos (a * pi / 180));

[i] .y: = y0-Round (r * sin (a * pi / 180));

end;
a : = A + 36;

end;

p [ll] .X : = P [l] .X; // щоб замкнути контур зірки
Canvas. Polyline (р); // накреслити зірку

end;
// натискання кнопки миші
procedure TForm1. FormMouseDown {Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);

begin
if Button = mbLeft // натиснута ліва кнопка?

then Form1. Canvas. Pen. Color: = clRed

else Form1. Canvas. Pen. Color: = clGreen;

StarLine (x, y, 30, Forml. Canvas);

end;

end.

Ріс.10.5. Зірка

Примітка 

Зверніть увагу, що розмір масиву р на одиницю більше, ніж кількість кінців і западин зірки, і що значення першого і останнього елементів масиву збігаються.