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

Методи креслення графічних примітивів

Будь-яка картинка, креслення, схема можуть розглядатися як сукупність графічних примітивів: точок, ліній, окружностей, дуг і ін. Таким чином, для того щоб на екрані з'явилася потрібна картинка, програма повинна забезпечити креслення (виводу) графічних примітивів, що складають цю картинку.

Креслення графічних примітивів на поверхні компонента (чи форми області виводу ілюстрації) здійснюється застосуванням відповідних методів до властивості Canvas цього компонента.

Лінія

Креслення прямої лінії здійснює метод LіnеTо, інструкція виклику якого в загальному виді виглядає в такий спосіб:

Компонент.Canvas.LineTo(x,у)

Метод LіnеTо вичерчує пряму лінію від поточної позиції олівця в крапку з координатами, зазначеними при виклику методу.

Початкову крапку лінії можна задати, перемістивши олівець у потрібну точку графічної поверхні. Зробити це можна за допомогою методу MoveTo (x,y: integer), указавши як параметри координати нового положення олівця.

Вид лінії (колір, товщина і стиль) визначається значеннями властивостей об'єкта Реn графічної поверхні, на якій викреслюється лінія.

Досить часто результати розрахунків зручно представити у виді графіка. Для більшої інформативності і наочності графіки зображують на фоні координатних осей і оцифрованої сітки. У лістингу 4.2 приведений текст програми, що на поверхню форми виводить координатні осі й оцифровану сітку (мал. 4.4).

Рис. 4.4 Форма додатка Координатна сітка

Лістинг 4.2 Осі координат і оцифрована сітка

unit grid_;

interface

uses

Windows, Messages, SysUtils, Classes,

Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

procedure FormPaint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1; implementation

{$R *.DFM}

procedure TForm1.FormPaint(Sender: TObject);

var

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

dx,dy:integer; // крок координатної сітки (у пикселах)

h,w:integer; // висота і ширина області виводу координатної сітки

х,у:integer;

lx,ly:real; // мітки (оцифровка) ліній сітки по X і Y

dlx,dly:real; // крок міток (оцифровки) ліній сітки по X і Y

cross:integer; // лічильник неоцифрованих ліній сітки

dcross:integer;// кількість неоцифрованих ліній між оцифрованими

begin

х0:=40; у0:=220; // осі починаються в точці (40,250)

dx:=40; dy:=40; // куля координатної сітки 40 пикселов

dcross:=1; // позначати лінії сітки X: 1 — кожну;

// 2 — через одну;

// 4 — через дві;

dlx:=0.5; // крок міток осі X

dly:=1.0; // крок міток осі Y, мітками будуть: 1, 2, 4 і т.д.

h:=200; w:=400;

with forml.Canvas do begin

cross:=dcross;

MoveTo(x0,v0); LineTo(x0,y0-h); // вісь X

MoveTo(x0,y0); LineTo(x0+w, y0); // вісь Y

// зарубки, сітка й оцифровка по осі X

x:=x0+dx;

lx:=dlx;

repeat

MoveTo(x,y0-4);LineTo(x,y0+4); // зарубка

cross:=cross-l;

if cross = 0 then // оцифровка

begin

TextOut(x-8,y0+5,FloatToStr(lx));

cross:=dcross ; end;

Pen.Style:=psDot;

MoveTo(x,y0-4);LineTo(x,y0-h); // лінія сітки

Pen.Style:=psSolid;

lx:=lx+dlx;

x:=x+dx;

until (x>x0+w);

// зарубки, сітка й оцифровка по осі Y

y:=y0-dy;

ly:=dly;

repeat

MoveTo(х0-4,у);LineTo(х0+4,у); // зарубка

TextOut(х0-20,у,FloatToStr(1у)); // оцифровка

Pen.Style:=psDot;

MoveTo(х0+4,у); LineTo(x0+w,у); // лінія сітки

Pen.Style:=psSolid;

y:=y-dy;

ly:=ly+dly; until (y<y0-h);

end;

end;

end.

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