Первая страница
Наша команда
Контакты
О нас

    Головна сторінка



Графічні можливості Delphi (Lazarus)

Скачати 252.29 Kb.

Графічні можливості Delphi (Lazarus)




Скачати 252.29 Kb.
Дата конвертації31.03.2017
Розмір252.29 Kb.
ТипПрограма

Графічні можливості Delphi (Lazarus)

Delphi дозволяє програмісту розробляти програми, які можуть виводити графіку: схеми, креслення, ілюстрації.

Кре́слення - дисципліна зі створення стандартизованих технічних малюнків, що виконуються фахівцями інженерами, архітекторами тощо.
Програміст, також програмник[Джерело?] - фахівець, що займається програмуванням, виконує розробку програмного забезпечення (в простіших випадках - окремих програм) для програмованих пристроїв, які, як правило містять один чи більше CPU.
Гра́фіка (нім. Graphik, грец. graphikos «написаний») - вид образотворчого мистецтва, для якого характерна перевага ліній і штрихів, використання контрастів білого і чорного та менше, ніж у живописі, використання кольору.
Можливість - це дія, що може відбутися або ні (можливо, приїду, а, можливо, і ні). Можливість можна забезпечити чи покладатись на «авось» та якось буде. Альтернатива дає шанс, але не гарантує без відповідних дій забезпечення результату і адекватності та конструктиву діяльності.

Програма виводить графіку на поверхню об’єкта (форми або компонента Image). Поверхні об’єкту відповідає властивість Canvas. Для того, щоб вивести на поверхню об’єкта графічний елемент (пряму лінію, коло, прямокутник і т. д.

Компоне́нт (від лат. componens, родовий відмінок componentis - складаючий) - складова частина, елемент чого-небудь.
Прямоку́тник - це чотирикутник, усі кути якого прямі. Протилежні сторони прямокутника рівні. Є окремим випадком паралелограма.
), необхідно застосувати до властивості Canvas цього об’єкта відповідний метод.
Необхідність - система зв'язків і відносин, що зумовлює зміну, поступальний рух, розвиток у жорстко визначеному напрямку з жорстко визначеними результатами. Іншими словами, необхідність - це такий зв'язок, що обов'язково призводить до певної події.
Наприклад, інструкція Form1.
Інструкція - правовий акт, який створюється органами державного управління для встановлення правил, що регулюють організаційні, науково-технічні, технологічні, фінансові та інші спеціальні сторони діяльності та відносин установ, закладів, підприємств, службових осіб.
Canvas.Rectangle (10,10,100,100) викреслює у вікні програми прямокутник.

Полотно

Як було сказано раніше, поверхні, на яку програма може виводити графіку, відповідає властивість Canvas. В свою чергу, властивість canvas — це об’єкт типу TCanvas. Методи цього типу забезпечують вивід графічних примітивів (точок, ліній, кіл, прямокутників и т. д.), а властивості дозволяють задати характеристики графічних примітивів, які виводяться: колір, товщину і стиль ліній; колір і вид заповнення областей; характеристики шрифту при виводі текстової інформації.

Методи виводу графічних примітивів розглядають властивість Canvas як деяке абстрактне полотно, на якому вони можуть рисувати (canvas переводиться як "поверхня", "полотно для рисування"). Полотно складається з окремих точок — пікселів. Положення пікселя характеризується його горизонтальною (X) і вертикальною (Y) координатами.

Координати (рос. координаты, англ. coordinates; нім. Koordinaten f pl) - числа, величини, що визначають положення точки у просторі.
Горизонталь, ізогіпса (англ. contour lines, horizontal, isohyps, нім. Höhenkurve f, Horizontale f; рос. горизонталь, изогипса; від дав.-гр. ισος - равний і дав.-гр. ὕψος - висота) - лінія на плані (карті), яка з'єднує точки земної поверхні з однаковою абсолютною висотою.
Абстра́кція (лат. abstractio - відвернення, відволікання) - одна з основних операцій мислення, а також метод наукового дослідження, що полягає в тому, що суб'єкт, відокремлюючи які-небудь ознаки об'єкту, що вивчається, відволікається від інших, не враховуються його неістотні сторони і ознаки.
Поло́ження - нормативно-правовий або локально-правовий акт, що визначає основні правила організації та діяльності державних органів, структурних підрозділів органу, а також установ, організацій і підприємств (філій), що їм підпорядковуються, тимчасово створюваних комісій, груп, бюро і т. ін.
Лівий верхній піксель має координати (0, 0). Координати зростають зверху вниз і зліва направо (рис. 1). Значення координат правої нижньої точки полотна залежать від розміру полотна.



10_01

Рис. 1. Координати точок полотна

Розмір полотна можна отримати, звернувшись до властивостей Height і width області ілюстрації (image) або до властивостей форми: ClientHeight і Clientwidth.

Олівець та кисть

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

Олівцю та кисті, що використовуються для виводу графіки на полотні, відповідають властивості Реn (олівець) і Brush (кисть), які представляють собою об’єкти типу TPen і TBrush, відповідно. Значення властивостей цих об’єктів визначають вид графічних елементів, які виводяться.

Олівець

Олівець використовується для викреслювання точок, ліній, контурів геометричних фігур: прямокутників, кіл, еліпсів, дуг і ін.

Геоме́трія (від дав.-гр. γη - Земля і μετρέω - вимірюю; землеміряння) - розділ математики, наука про просторові форми, відносини і їхні узагальнення.
Вид лінії, яку залишає олівець на поверхні полотна, визначають властивості об’єкта TPen, які перелічені в табл. 1.

Таблиця 1. Властивості об’єкта TPen (олівець)


















Властивість

Що визначає







Color

Колір лінії







Width

Товщину лінії







Style

Вид лінії







Mode

Режим відображення
















Властивість Color задає колір лінії, яку викреслює олівець. В табл. 2 перелічені іменовані константи (тип TColor), які можна використовувати як значення властивості Color.
Константа (лат. constans - стала величина, інша назва - стала) - величина, що не змінює свого значення протягом певного процесу (на відміну від змінної, значення якої може змінюватись). Прикладами констант є число пі, коефіцієнти многочленів, температура під час ізотермічного процесу.

Таблиця 2. Значення властивості Color визначає колір лінії
























Константа

Колір

Константа

Колір







clBlack

Чорний

clSilver

Сріблястий







clMaroon

Каштановий

clRed

Червоний







clGreen

Зелений

clLime

Салатний







clOlive

Оливковий

clBlue

Синій







clNavy

Темно-синій

clFuchsia

Яскраво-рожевий







clPurple

Рожевий

clAqua

Бірюзовий







clTeal

Зелено-голубий

clWhite

Білий







clGray

Сірий




























Властивість Width задає товщину лінії (в пікселях). Наприклад, інструкція Canvas.Pen.Width: =2 встановлює товщину лінії в 2 пікселя.

Властивість Style визначає вид (стиль) лінії, яка може бути безперервною або переривчастою, складатись із штрихів різної довжини. В табл. 3 перелічені іменовані константи, які дозволяють задати стиль лінії. Товщина пунктирної лінії не може бути більше 1. Якщо значення властивості Pen.Width більше за одиницю, то пунктирна лінія буде виведена як суцільна.

Таблиця 3. Значення властивості Реn.Tуре визначає вид лінії

















Константа

Вид лінії







psSolid

Суцільна лінія







psDash

Пунктирна лінія, довгі штрихи







psDot

Пунктирна лінія, короткі штрихи







psDashDot

Пунктирна лінія, чергування довгого і короткого штрихів







psDashDotDot

Пунктирна лінія, чергування одного довгого і двох коротких штрихів







psClear

Лінія не відображається (використовується, якщо не потрібно зображати границю області, наприклад, прямокутника)
















Властивість Mode визначає, як буде формуватись колір точок лінії в залежності від кольору точок полотна, через які ця лінія викреслюється. За замовчуванням вся лінія викреслюється кольором, який визначає значення властивості Pen.Color.

Але програміст може задати інверсний колір лінії по відношенню до кольору фона. Це гарантує, що незалежно від кольору фона всі ділянки лінії будуть видні, навіть в тому випадку, коли колір лінії і колір фону співпадають.

В табл. 4 перелічені деякі константи, які можна використовувати як значення властивості Pen.Mode.

Таблиця 4. Значення властивості Реn.Mode впливає на колір лінії


















Константа

Колір лінії







pmBlack

Чорний, не залежить від значення властивості Pen.Color







pmWhite

Білий, не залежить від значення властивості Pen.Color







pmCopy

Колір лінії визначається значенням властивості Pen.Color







pmNotCopy

Колір лінії є інверсним по відношенню до значення властивості Pen.Color







pmNot

Колір точки лінії визначається як інверсний по відношенню до кольору точки полотна, в яку виводиться точка лінії
















 Кисть

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

Фігура - термін, формально застосовуваний до довільної множини точок; тим не менш зазвичай фігурою називають множину точок на площині, які обмежені скінченим числом ліній. Наприклад: квадрат, коло, кут.
Кисть, як об’єкт, має дві властивості, перелічені в табл. 5.

Таблиця 5. Властивості об’єкта TBrush (кисть)
















Властивість

Визначає







Color

Style


Колір замальовування замкнутої області

Стиль (тип) заповнення області


















Область всередині контуру може бути замальована або заштрихована. В першому випадку область повністю перекриває фон, а в другому — через незаштриховані ділянки області буде видно фон.

Як значення властивості Color можна використовувати будь-яку з констант типу TColor (див. список констант для властивості Pen.Color в табл. 2).

Константи, які дозволяють задати стиль заповнення області, наведені в табл. 6.

Таблиця 6. Значення властивості Brush.Style визначають тип замальовування


















Константа

Тип заповнення (заливки) області







bsSolid

Суцільна заливка







bsClear

Область не замальовується







bsHorizontal

Горизонтальна штриховка







bsVertical

Вертикальна штриховка







bsFDiagonal

Діагональна штриховка з нахилом ліній вперед







bsBDiagonal

Діагональна штриховка з нахилом ліній назад







bsCross

Горизонтально-вертикальна штриховка, в клітинку







bsDiagCross

Діагональна штриховка, в клітинку
















Як приклад в лістингу 1 наведена програма Стилі заповнення областей, яка у вікно (рис. 2) виводить вісім прямокутників, замальованих зеленим кольором з використанням різних стилів.

10_02u

Рис. 2. Вікно програми Стилі заповнення областей

Лістинг 1. Стилі заповнення областей

unit brustyle_;

interface

uses


Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;

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);

const

bsName: array[1..8] of string = ('bsSolid','bsClear','bsHorizontal',



'bsVertical','bsFDiagonal','bsBDiagonal',

'bsCross','bsDiagCross');

var

x,y: integer; // координати лівого верхнього кута прямокутника



w,h: integer; // ширина і висота прямокутника

bs: TBrushStyle;// стиль заповнення області

k: integer; // номер стилю заповнення

i,j: integer;

begin

w:=40; h:=40; // розмір області(прямокутника)



y:=20;

for i:=1 to 2 do

begin

х:=10;


for j:=1 to 4 do

begin


k:=j (i-1)*4; // номер стилю заповнення

case k of

1: bs := bsSolid;

2: bs := bsClear;

3: bs := bsHorizontal;

4: bs := bsVertical;

5: bs := bsFDiagonal;

6: bs := bsBDiagonal;

7: bs := bsCross;

8: bs := bsDiagCross;

end;

// вивід прямокутника



Canvas.Brush.Color := clGreen;

// колір замальовування — зелений

Canvas.Brush.Style := bs;

// стиль замальовування

Canvas.Rectangle (x, y, x w, y h) ;

// вивід назви стилю

Canvas.Brush.Style := bsClear;

Canvas.TextOut(x, y-15, bsName[k]);

// вивід назви стилю

x := x w 30;

end;

y := y h 30;



end;

end.


Вивід тексту

Для виводу тексту на поверхню графічного об’єкта використовується метод TextOut. Інструкція виклику метода TextOut в загальному вигляді наступна:

Об’єкт.Canvas.TextOut(x, у, Текст)

де:


  • об’єкт — ім’я об’єкта, на поверхню якого виводиться текст;

  • х, у — координати точки графічної поверхні, від якої виконується вивід тексту (рис. 3);

  • Текст — змінна або константа символьного типу, значення якої визначає текст, який виводиться методом.

10_03u

Рис. 3. Координати області виводу тексту

Шрифт, який використовується для виводу тексту, визначається значенням властивості Font відповідного об’єкта Canvas. Властивість Font являє собою об’єкт типу TFont. В табл. 7 перелічені властивості об’єкта TFont, які дозволяють задати характеристики шрифту, який використовується методами TextOut та TextRect для виводу тексту.

Таблиця 7. Властивості об’єкту TFont


















Властивість

Визначає







Name

Size

Style

Color


Шрифт, який використовується. Як значення слід використовувати назву шрифту, наприклад Arial

Розмір шрифту в пунктах (points). Пункт— це одиниця виміру розміру шрифту, що використовується в поліграфії.

Полігра́фія (від полі - багато; графо - пишу) - галузь техніки, сукупність технічних засобів для множинного репродукування текстового матеріалу й графічних зображень.
Одини́ця вимі́рювання (англ. measuring unit, unit of measure) - певний умовний розмір фізичної величини, прийнятий для кількісного відображення однорідних з нею величин.
Один пункт дорівнює 1/72 дюйма

Стиль начертання символів. Може бути: нормальним, напівжирним, курсивним, підкресленим, перекресленим.

Но́рма (лат. norma - дослівно «косинець», у переносному значенні - «правило») - регулятивне правило, яке вказує межі свого застосування; відповідає чомусь типовому або звичайному.
Стиль задається за допомогою наступних констант: fsBold (напівжирний), fsltalic (курсив), fsUnderline (підкреслений), fsStrikeOut (перекреслений).

Властивість style є множиною, що дозволяє комбінувати необхідні стилі. Наприклад, інструкція програми, яка встановлює стиль "напівжирний курсив", виглядає так:

Об’єкт. Canvas . Font : = [fsBold, fsItalic]

Колір символів. Як значення можна використовувати константу типу TColor














Увага!


Область виводу тексту замальовується поточним кольором кисті. Тому перед виводом тексту для властивості Brush.Color треба присвоїти значення bsClear або задати колір кисті, який співпадає з кольором поверхні, на яку виводиться текст.

Наступний фрагмент програми демонструє використання функції TextOut для виводу тексту на поверхню форми:

with Form1.Canvas do

begin


// установити характеристики шрифту

Font.Name := 'Tahoma';

Font.Size := 20;

Font.Style := [fsItalic, fsBold] ;

Brush.Style := bsClear; //область виводу тексту не замальовується

TextOut(0, 10, 'Borland Delphi 7');

end;

Після виводу тексту методом TextOut вказівник виводу (олівець) переміщується в правий верхній кут області виводу тексту.

Переміщення - зміна положення якогось матеріального об'єкту. В фізиці - це переміщення фізичного тіла. Переміщенням також називають вектор, який характеризує цю зміну. Має властивість адитивності. Абсолютна величина переміщення, тобто довжина відрізка, що сполучає початкову й кінцеву точку, вимірюється в метрах у системі СІ та в сантиметрах у системі СГС.



Іноді треба вивести який-небудь текст після повідомлення, довжина якого під час розробки програми невідома. Наприклад, це може бути слово "грн." після значення числа, записаного прописом. В цьому випадку необхідно знати координати правої границі вже виведеного тексту. Координати правої границі тексту, що виведений методом TextOut, можна отримати, звернувшись до властивості PenPos.

Наступний фрагмент програми демонструє можливість виводу рядка тексту з допомогою двох інструкцій TextOut.

with Form1.Canvas do

begin


TextOut(0, 10, 'Borland ') ;

TextOut(PenPos.X, PenPos.Y, 'Delphi 7');

end;

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



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

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

Лінія

Викреслювання прямої лінії здійснює метод LinеТо, інструкція виклику якого в загальному виді така:

Компонент.

Пряма́ - одне з основних понять геометрії. При систематичному викладі геометрії пряма лінія зазвичай приймається за одне з вихідних понять, яке лише опосередковано визначається аксіомами геометрії. Якщо основою побудови геометрії служить поняття відстані між двома точками простору, то пряму лінію можна визначити як лінію, шлях уздовж якої дорівнює відстані між двома точками.
Canvas.LineTo(x,у)

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

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

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

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

Початковий код (англ. source code; також перекладається українською як вихідний код, програмний код, джерельний код, первинний код, текст програми, у професійному середовищі також сирцевий код, у контексті код або сирці) - будь-який набір інструкцій або оголошень, написаних комп'ютерною мовою програмування у формі, що її може прочитати і модифікувати людина.


10_04u

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

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

unit grid_;

Оцифро́вування, оцифрува́ння, дигіталізація (англ. Digitalisation) - переведення інформації в цифрову форму. Більш технологічне визначення: Цифрова трансмісія даних, закодованих у дискретні сигнальні імпульси.

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; //висота і ширина області виводу координатної сітки

x, y: integer;

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

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

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

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

begin


x0:=30; y0:=220;
Кількість - в Арістотелівській логіці друга з 10 категорій (класів, розрядів, які спрощують процес розумового визначення будь-якої речі), побічна обставина матеріальних речей , за допомогою якої вони поширюються в просторі, вимірюються якоюсь математичною нормою і здатні бути поділеними на окремі частини.
// осі починаються в точці (40,250)

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

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

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

// 3 - через дві;

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

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

h:=200; w:=300;

with Form1.Canvas do

begin


cross:=dcross;

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

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

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

x:=x0 dx;

lx:=dlx;


repeat

MoveTo(x,y0-3);LineTo(x,y0 3); // засічка

cross:=cross-1;

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

begin

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



cross:=dcross;

end;


Pen.Style:=psDot;

MoveTo(x,y0-3); 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(x0-3,y); LineTo(x0 3,y); // засічка

TextOut(x0-20,y,FloatToStr(ly)); // оцифровка

Pen.Style:=psDot;

MoveTo(x0 3,y); LineTo(x0 w,y); // лінія сітки

Pen.Style:=psSolid;

y:=y-dy;


ly:=ly dly;

until (y

end;

end;


end.

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

Ламана лінія

Метод Polyline викреслює ламану лінію.

Ламана (ламана лінія) - зв'язна послідовність відрізків. Більш формально ламана P це крива визначена послідовністю точок ( A 1 , A 2 , … , A n ) ,A_,\dots ,A_)} , які звуться її вершинами, таким чином крива містить відрізки, що поєднуюють впорядковані вершини, які називаються ланками ламаної.
Як параметр метод отримує масив типу TPoint. Кожний елемент масиву є записом, поля х та у якого містять координати точки перегину ламаної. Метод Polyline викреслює ламану лінію, послідовно з’єднуючи прямими точки, координати яких знаходяться в масиві: першу з другою, другу з третьою, третю з четвертою і т. д.

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

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

procedure TForm1.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:=1 to 50 do

begin

gr[i].x := x0 (i-1)*dx;



gr[i].y := y0 - Data[i]*dy;

end;


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

Form1.Canvas.Polyline(gr);

with Form1.Canvas do

begin

MoveTo(x0,y0); LineTo(x0,10); // ось Y



MoveTo(x0,y0); LineTo(200,y0); // ось X

Polyline(gr); // графік

end;

end;


Метод Polyline можна використовувати для викреслювання замкнутих контурів. Для цього потрібно, щоб перший та останній елементи масиву містили координати однієї і тієї ж точки. Як приклад використання методу Polyline для викреслювання замкнутого контуру в лістингу 4 наведена програма, яка на поверхні діалогового вікна, в точці натискання кнопки мишки, викреслює контур п’ятикутної зірки (рис. 5). Колір, яким викреслюється зірка, залежить від того, яка з кнопок мишки була натиснута. Процедура обробки натискання кнопки мишки (подія MouseDown) викликає процедуру рисування зірки StarLine і передає їй як параметр координати точки, в якій була натиснута кнопка. Зірку викреслює процедура StarLine, яка як параметр отримує координати центра зірки і полотно, на якому зірка повинна бути виведена. Спочатку обчислюються координати кінців та впадин зірки, які записуються в масив р. Потім цей масив передається як параметр в метод Polyline. При обчисленні координат променів і впадин зірки використовуються функції sin та cos. Так як аргумент цих функцій повинен бути виражений в радіанах, то значення кута в градусах домножується на величину pi/180, де pi — це стандартна іменована константа, яка дорівнює числу 3.14159...
Обчи́слення - є гілкою математики, зосередженою на функціях, похідних, інтегралах, і нескінченному ряду чисел. Цей предмет являє собою важливу частину сучасної математичної освіти. Воно складається з двох основних галузей - диференціального і інтегрального численнь, які пов'язують основні теореми обчислення.
Станда́рт - нормативний документ, заснований на консенсусі, прийнятий визнаним органом, що встановлює для загального і неодноразового використання правила, настанови або характеристики щодо діяльності чи її результатів, та спрямований на досягнення оптимального ступеня впорядкованості в певній сфері.

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

Form1: TForm1;

implementation

{$R *.dfm}


// викреслює зірку

procedure StarLine(x0, y0, r: integer; Canvas: TCanvas);

// x0,y0 - координати центру зірки

//r - радіус зірки

var

p: array [1.. 11] of TPoint; // масив координат променів та впадин



a: integer; // кут між віссю ОХ і прямою, яка з'єднує

// центр зірки і кінець променя або впадину

i: integer;

begin


a:= 18; // будуємо від правого гор. променя

for i:=1 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 // промінь

p[i].x:=x0 Round(r*cos(a*pi/180)) ;

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

end;

a:= a 36;



end;

p[11].x:= p[1].x; // щоб замкнути контур зірки

p[11].y:= p[1].y; // щоб замкнути контур зірки

Canvas.Polyline(p); // накреслити зірку

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, Form1.Canvas );

end;


end.
10_05

Рис.5. Зірка



Примітка

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

Коло і еліпс

Метод Ellipse викреслює еліпс або коло, в залежності від значень параметрів. Інструкція виклику методу в загальному виді така:

Об’єкт.Canvas.Ellipse(x1,y1, х2,у2)

де:


  • об’єкт — ім’я об’єкта (компоненти), на поверхні якого виконується викреслювання;

  • x1, y1, х2, у2 — координати прямокутника, всередині якого викреслюється еліпс або, якщо прямокутник є квадратом, коло (рис. 6).

10_06

Рис. 6. Значення параметрів методу Ellipse визначають вид геометричної фігури

Колір, товщина і стиль лінії еліпса визначаються значеннями властивості Реn, а колір і стиль заливки області всередині еліпса — значеннями властивості Brush поверхні (Canvas), на яку виконується вивід.

Дуга

Викреслювання дуги виконує метод Arc, інструкція виклику якого в загальному виді така:

Об’єкт.Canvas.Arc(x1,y1,х2,у2,х3,у3,х4,у4);

де:


  • x1, y1, х2, у2 — параметри, які визначають еліпс (коло), частиною якого є дуга, що викреслюється;

  • х3, у3 — параметри, які визначають початкову точку дуги;

  • х4, у4 — параметри, які визначають кінцеву точку дуги.

Початкова (кінцева) точка — це точка перетину границі еліпса і прямої, що проведена з центру еліпса в точку з координатами х3 и у3 (х4, у4). Дуга викреслюється проти годинникової стрілки від початкової точки до кінцевої (рис. 7).
Годинник (арх.: дзиґа́р, дзиґарі́) - пристрій для вимірювання часу.

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



10_07

Рис. 7. Значення параметрів методу Arc визначають дугу як частину еліпсу (кола)

Прямокутник

Прямокутник викреслюється методом Rectangle, інструкція виклику якого в загальному виді така:

Об’єкт.Canvas.Rectangle(x1, y1,x2, y2)

де:


  • об’єкт — ім’я об’єкту (компоненти), на поверхні якого виконується викреслювання;

  • x1, y1 та х2, у2 — координати лівого верхнього і правого нижнього кутів прямокутника.

Метод RoundRec також викреслює прямокутник, але із скругленими кутами. Інструкція виклику метода RoundRec така:

Об’єкт.Canvas.RoundRec(x1,y1,х2, у2, х3, у3)

де:


  • x1, y1, х2, у2 -- параметри, які визначають положення кутів прямокутника, в який вписуються прямокутник із скругленими кутами;

  • х3 и у3 — розмір еліпса, одна чверть якого використовується для викреслювання скругленого кута (рис. 8).

10_08

Рис. 8. Метод RoundRec викреслює прямокутник із скругленими кутами

Вид лінії контуру (колір, ширина і стиль) визначається значеннями властивості Реn, а колір и стиль заливки області всередині прямокутника — значеннями властивості Brush поверхні (Canvas), на якій прямокутник викреслюється.

Є ще два методи, які викреслюють прямокутник, використовуючи як інструмент тільки кисть (Brush). Метод FillRect викреслює замальований прямокутник, а метод FrameRect — тільки контур. У кажного з цих методів лише один параметр — структура типу TRect. Поля структури TRect містять координати прямокутної області, вони можуть бути заповнені з допомогою функції Rect.

Нижче як приклад використання методів FillRect і FrameRect наведена процедура, яка на поверхні форми викреслює прямокутник з червоною заливкою і прямокутник с зеленим контуром.

procedure TForm1.Button1Click(Sender: TObject);

var

r1, r2: TRect; // координати кутів прямокутників



begin

// заповнення полів структури

// задамо координати кутів прямокутників

r1 := Rect(20,20,60,40);

r2 := Rect(10,10,40,50);

with Fоrm1.Canvas do

begin

Brush.Color:= clRed;



FillRect(r1); // замальований прямокутник

Brush.Color := clGreen;

FrameRect(r2}; // тільки границя прямокутника

end;


end;

Багатокутник

Метод Polygon викреслює багатокутник.

Многоку́тник[К 1] (багатоку́тник, поліго́н) - геометрична фігура, замкнена ламана (сама, або разом із точками, що лежать усередині). Вершини цієї ламаної називають вершинами многокутника, а відрізки ламаної - сторонами многокутника.
Як параметр метод отримує масив типу TPoint. Кажен елемент масиву - це запис, поля (х,у) якої містять координати однієї вершини багатокутника. Метод Polygon викреслює багатокутник, послідовно з’єднуючи прямими лініями точки, координати яких знаходяться в масиві: першу з другою, другу з третьою, третю с четвертою і т. д. Потім з’єднуються остання і перша точки.

Колір и стиль границі багатокутника визначаються значеннями властивості Реп, а колір и стиль заливки області, яка обмежена лінією границі, — значеннями властивості Brush, причому область замальовується поточним кольором і стилем кисті.

Нижче наведена процедура, яка, використовуючи метод polygon, викреслює трикутник:

procedure TForm1.Button2Click(Sender: TObject);

var

pol: array[1..3] of TPoint; // координати точок трикутника



begin

pol[1].x := 10;

polf1].y := 50;

pol[2].x := 40;

pol[2].y := 10;

pol[3].х := 70;

pol[3].у := 50;

Form1.Canvas.Polygon(pol);

end;


Сектор

Метод Pie викреслює сектор еліпса або круга. Інструкція виклику метода в загальному виді наступна:

Об’єкт. Canvas.Pie(x1,y1,x2,y2,х3,у3,х4,у4)

де:


  • x1, y1, х2, у2 — параметри, що визначають еліпс (коло), частиною якого є сектор;

  • х3, у3, х4, у4 — параметри, що визначають координати кінцевих точок прямих, які є границями сектора.

Початкові точки прямих співпадають з центром еліпса (кола). Сектор вирізається проти годинникової стрілки від прямої, яка задана точкою з координатами (x3, y3), до прямої, яка задана точкою з координатами (х4, у4) (рис.
На різних етапах розвитку цивілізації людство використовувало сонячні, зоряні, водяні, вогневі, пісочні, колісні, механічні, електричні, електронні й атомні годинники.
9).

10_09

Рис. 9. Значення параметрів методу Pie визначають сектор як частину еліпса (кола)

Точка

Поверхні, на яку програма може здійснювати вивід графіки, відповідає об’єкт Canvas. Властивість Pixels, яка являє собою двовимірний масив типу TColor, містить інформацію про колір кожної точки графічної поверхні. Використовуючи властивість Pixels, можна задати потрібний колір для будь-якої точки графічної поверхні, тобто "нарисувати" точку. Наприклад , інструкція

Form1.Canvas.Pixels[10,10]:=clRed

Замальовує точку поверхні форми в червоний колір.

Черво́ний - колір з мінімальною частотою, що сприймається людським оком. Діапазон червоних кольорів в спектрі з довжиною хвилі 630–760 нанометрів, межа сприйняття залежить від віку. Один з трьох «основних» кольорів в системі RGB, додатковий колір до нього - синьо-зелений.

Розмірність масиву pixels визначається розміром графічної поверхні. Розмір графічної поверхні форми (робочої області, яку також називають клієнтською) задається значеннями властивостей ClientWidth і ClientHeight, а розмір графічної поверхні компонента Image — значеннями властивостей Width та Height. Лівій верхній точці робочої області форми відповідає елемент Pixels[0,0], а правій нижній -Pixels[CiientWidth - 1, ClientHeight - 1].

Властивість Pixels можна використовувати для побудови графіків. Графік будується, як правило, на основі обчислень за формулою. Границі діапазону зміни аргументу функції є початковими даними.

Діапазо́н (від грец. δϊα πασον (χορδων) - через усі (струни).
Діапазон зміни значення функції може бути обчислений. На основі цих даних можна обчислити масштаб, який дозволить побудувати графік таким чином, щоб він займав усю область форми, яка призначена для виводу графіка.

Наприклад, якщо деяка функція f(x) може приймати значення від нуля до 1000, і для виводу її графіка використовується область форми висотою в 250 пікселів, то масштаб осі Y вираховується за формулою: r= 250/1000. Таким чином, значенню f(x) = 70 буде відповідати точка з координатою Y =233.

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

Y= h -f(x) х r = 250 - 70х(250/1000),

де h - висота області побудови графіка.

Зверніть увагу на те, що точне значення виразу 250 - 70х(250/1000) дорівнює 232,5. Але так як індексом властивості pixels, яка використовується для виводу точки на поверхню Canvas, може бути тільки ціле значення, то число 232,5 округлюється до найближчого цілого, яким є число 233.

Наступна програма, текст якої подано в лістингу 5, використовуючи властивість pixels, виводить графік функції у = 2 sin(x) ex/5. Для побудови графіку використовується вся доступна область форми, причому якщо під час роботи програми користувач змінить розмір вікна, то графік буде виведено заново з врахуванням реальних розмірів вікна.

Кори́стува́ч - той, хто користується чим-небудь - майном, землею, комп'ютером тощо.

Лістинг 5. Графік функції

unit grfunc_;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;



type

TForm1 = class(TForm)

procedure FormPaint(Sender: TObject);

procedure FormResize(Sender: TObject);

private

{ Private declarations }



public

{Public declarations }

end;
var

Form1: TForm1;

implementation

{$R *.DFM}

// Функція, графік якої треба побудувати

function f(x:real):real;

begin

f:=2*Sin(x)*exp(x/5) ;



end;

// будує графік функції

procedure GrOfFunc;

var


x1,x2:real; // границі зміни аргументу функції

y1,y2:real; // границі зміни аргументу функції

x:real; // аргумент функції

y:real; // значення функції в точці х

dx:real; // приріст аргументу

l,b:integer; // лівий нижній кут області виводу графіка

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

mx,my:real; // масштаб по осях X та Y

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

begin


// область виводу графіка

l:=10; // X - координата лівого верхнього кута

b:=Form1.ClientHeight-20;

//У - координата лівого верхнього кута

h:=Form1.ClientHeight-40; // висота

w:=Form1.Width-40; // ширина

x1:=0; // нижня границя діапазону аргументу

x2:=25; // верхня границя діапазону аргументу

dx:=0.01; // крок аргументу

// знайдемо максимальне та мінімальне значення

// функції на відрізку [x1,x2]

y1:=f(x1); // мінімум

y2:=f(x1); //максимум

x:=x1;


repeat

y:= f(x);

if y < y1 then y1:=y;

if y > y2 then y2:=y;

x:=x dx; until (x >= x2);

// обчислимо масштаб

my:=h/abs(y2-y1); // масштаб по осі Y

mx:=w/abs(x2-x1); // масштаб по осі X

x0:=1;

y0:=b-Abs(Round(y1*my)) ;



with Form1.Canvas do

begin


// осі

MoveTo(l,b); LineTo(l,b-h);

MoveTo(x0,y0); LineTo(x0 w,y0);

TextOut(l 5,b-h,FloatToStrF(y2,ffGeneral,6,3));

TextOut(l 5,b,FloatToStrF(y1,ffGeneral,6,3));

// побудова графіка

x:=x1;

repeat


y:=f(x);

Pixels[x0 Round(x*mx),y0-Round(y*my)]:=clRed;

x:=x dx;

until (x >= x2);

end;

end;
procedure TForm1.FormPaint(Sender: TObject);



begin

GrOfFunc;

end;
// змінився розмір вікна програми

procedure TForm1.FormResize(Sender: TObject);

begin

// очистити форму



Form1.Canvas.FillRect(Rect(0,0,ClientWidth, ClientHeight));

// побудувати графік

GrOfFunc;

end;


end.

Основну роботу виконує процедура GrOfFunc, яка спочатку обчислює максимальне (у2) та мінімальне (y1) значення функції на відрізку [x1,x2]. Потім, використовуючи інформацію про ширину (Form1.ClientWidth -40) і висоту (Form1.ClientHeight - 40) області виводу графіка, обчислює масштаб по осях X (mх) та Y(mу).

Висота і ширина області виводу графіка визначається розмірами робочої (клієнтської) області форми, тобто без врахування області заголовку та границь. Після обчислення масштабу процедура обчислює координату у горизонтальної осі (уо) і викреслює координатні осі графіку. Потім виконується побудова графіка (рис. 10).

Виклик процедури GrOfFunc виконує процедури обробки подій onPaint та onFormResize. Процедура TForm1.FormPaint забезпечує викреслювання графіка після появи форми на екрані в результаті запуску програми, а також після появи форми під час роботи програми, наприклад, в результаті видалення або переміщення інших вікон, які повністю або частково перекривають вікно програми.

Результат, пі́дсумок, (заст. ску́ток, вислід) - кінцевий наслідок послідовності дій. Можливі результати містять перевагу, незручність, вигоду, збитки, цінність і перемогу. Результат є етапом діяльності, коли визначено наявність переходу якості в кількість і кількості в якість.
Процедура TForm1.FormResize забезпечує викреслювання графіка після зміни розміру форми.



10_10u

Рис. 10. Графік, побудований процедурою GrOfFunc



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

Примітка

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


Скачати 252.29 Kb.

  • Олівець
  • Кисть
  • Лінія
  • Ламана лінія
  • Багатокутник