Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КЛ_Середовище.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.07 Mб
Скачать

Ламана лінія

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

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

Лістинг 4.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 можна використовувати для креслення замкнутих контурів. Для цього треба, щоб перший і останній елементи масиву містили координати однієї і тієї ж крапки. Як приклад використання методу Polyline для креслення замкнутого контуру в лістингу 4.4 приведена програма, що на поверхні діалогового вікна, у точці натискання кнопки миші, вичерчує контур п'ятикутної зірки (мал. 4.5). Колір, яким викреслюється зірка, залежить від того, яка з кнопок миші була натиснута. Процедура обробки натискання кнопки миші (подія MouseDown) викликає процедуру малювання зірки starLine і передає їй як параметр координати точки, у якій була натиснута кнопка. Зірку вичерчує процедура starLine, що як параметри одержує координати центра зірки і полотно, на якому зірка повинна бути виведена. Спочатку обчислюються координати кінців і западин зірки, що записуються в масив р. Потім цей масив передається як параметр методу Polyline. При обчисленні координат променів і западин зірки використовуються функції sin і cos. Тому що аргумент цих функцій повинний бути виражений у радіанах, то значення кута в градусах домножується на величину pi/180, де pi — це стандартна іменована константа рівна числу π.

Лістинг 4.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

{$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+46;

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.

Рис.4.5 Зірка

Примітка

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