Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Графічні процедури мови Паскаль






 

У графічних процедурах мови Паскаль, що описуються нижче, параметри (якщо не буде обумовлено додатково) мають тип INTEGER.

 

Установлення графічних режимів

Процедура INITGRAPH ініціалізує графічну систему i переводить апаратуру в графічний режим. Звернення:

INITGRAPH (Gd, Gm, ' ');

Gd i Gm є параметрами-змінними типу INTEGER. Якщо Gd дорівнює DETECT (тобто нулю), то викликається процедура автоматичного відкриття графічної апаратури.

Після виклику INITGRAPH значення змінної Gd буде відповідати поточному графічному драйверу, а значення змінної Gm буде відповідати поточному графічному режиму. Якщо відбувається помилка, то функція GRAPHRESULT ¹ grok, де grok - константа графічної помилки, дорівнює нулю.

Процедура SETBKCOLOR встановлює поточний фоновий колір, використовуючи палітру (див. табл. 10). Звернення:

SETBKCOLOR (C);

Параметр C може набувати значення від 0 до 15. За замовченням як фоновий влаштовується чорний колір.

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

SETCOLOR (C);

Параметр C може набувати значення від 0 до 15. За замовченням влаштовується білий колір. Функція GETMAXCOLOR повертає найбільш допустиме значення кольору для поточного драйвера i режиму.

Процедура SETFILLSTYLE встановлює шаблон i колір для заповнення зображення, що виконується за допомогою процедур FILLPOLY, BAR, BAR3D, PIESLICE. Звернення:

SETFILLSTYLE(P, C);

Параметр P встановлює шаблон заповнення; може набувати значення від 0 до 12. Параметр C встановлює колір заповнення. За замовченням визначений суцільний шаблон (P=1) i максимальний колір палітри.

Процедура SETLINESTYLE встановлює поточну товщину i тип ліній, що зображуються, за допомогою процедур LINE, RECTANGLE, ARC та ін. Звернення:

SETLINESTYLE(L, N, T);

Параметр L задає тип лінії: 0 - суцільна, 1 - точкова, 2 - штрихпунктирна, 3 - пунктирна. Параметр N приймається рівним 0. Параметр T задає товщину лінії: 1 - нормальна товщина, 3 - потрійна товщина. За умовчанням визначена суцільна лінія нормальної товщини.

Процедура SETVIEWPORT встановлює поточне поле виводу чи вікно для графічного виводу. Звернення:

SETVIEWPORT(X1, Y1, X2, Y2, B);

Тут (X1, Y1) визначають лівий верхній кут поля виводу, (X2, Y2) - нижній правий кут. Мінімальний верхній лівий кут вікна дорівнює (0.0). Булевська змінна B визначає, чи будуть відсікатися зображення на кордонах поля виводу: TRUE - так, FALSE - ні. За умовчанням поле виводу має весь графічний екран, що можна задати зверненням:

SETVIEWPORT(0, 0, GETMAXX, GETMAXY, TRUE);

Процедура CLEARDEVICE очищує екран, використовуючи фоновий колір, встановлений процедурою SETBKCOLOR, i готує його для виводу. Звернення:

CLEARDEVICE;

Процедура CLEARVIEWPORT очищує поточне вікно, встановлюючи колір заповнення, відповідний фоновому кольору. Звернення:

CLEARVIEWPORT;

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

CLOSEGRAPH;

 

Креслення ліній

Процедура LINE малює пряму лінію від точки (X1, Y1) до крапки (X2, Y2). Звернення:

LINE (X1, Y1, X2, Y2);

Процедура малює лінію, товщина i тип якої задаються SETLINESTYLE, i використовує колір, встановлений SETCOLOR. Наприклад, процедура

LINE(100, 50, 300, 150);

намалює пряму лінію, що з'єднує точки з координатами (100, 50) i (300, 150).

Процедура LINEREL проводить пряму лінію від поточного покажчика в точку, що розташована на заданій відстані (Dx, Dy) від поточного покажчика. Звернення:

LINEREL (Dx, Dy);

Процедура LINETO малює пряму лінію з точки, в якій знаходиться поточний покажчик, в точку (X, Y). Звернення: LINETO (X, Y);.

Процедура MOVEREL переміщає поточний покажчик в точку, що знаходиться на відстані (Dx, Dy) щодо поточної позиції. Звернення:

MOVEREL (Dx, Dy);

Процедура MOVETO переміщає поточний покажчик в точку (X, Y). Звернення:

MOVETO (X, Y);

Процедура SETWRITEMODE керує режимом порозрядного суміщення зображень. Від нього залежить, чи буде стертою при накладанні двох точок «нижня» i яким засобом можна усунути «верхнє» зображення з екрана. Керуючи цим режимом, можна одержати складні відеоефекти. Звернення:

SETWRITEMODE (I);

Значення I визначається стандартними константами CopyPut=0 i XORPut=1. Якщо I=0, то при «накладанні» пікселя, що належить відображеній лінії, на «попередній» даному пiкселю привласнюється поточне значення кольору, тобто відображена лінія буде мати заданий колір. Для того, щоб стерти з екрана відображену лінію, достатньо виконати повторне відображення лінії при I=1.

 

Креслення кіл i їх дуг

Процедура CIRCLE малює коло з центром в точці (X, Y), радіусом R, поточним кольором, встановленим в SETCOLOR. Звернення:

CIRCLE (X, Y, R);

Наприклад, процедура

CIRCLE (200, 100, 80);

намалює коло радіуса 80, центр якого знаходиться в точці з координатами (200, 100).

Процедура ARC малює дугу кола із центром у точці (X, Y), радіусом R від початкового куту FH до кінцевого FK. Звернення:

ARC(X, Y, FH, FK, R);

Кути визначаються проти годинної стрілки. Наприклад, процедура

ARC (180, 90, 30, 200, 50);

намалює дугу кола радіуса 50 від 30 до 200 градусів з центром у точці (180, 90). Процедура

ARC(300, 100, 0, 360, 80);

намалює коло радіуса 80, центр якого знаходиться у точці (300, 100).

Процедура PIESLICE малює i заповнює кольором сектор кола із центром у точці (X, Y), радіусом R від початкового кута FH до кінцевого FK. Звернення:

PIESLICE(X, Y, FH, FK, R);

Контур сектора накреслюється поточним кольором, під час заповнення використовуються тип i колір, визначені процедурою SETFILLSTYLE. Наприклад, процедура

PIESLICE(250, 100, 0, 270, 60);

намалює заповнений сектор радіуса 60 з центром у точці (250, 100) від 0 до 270 градусів.

 

Креслення еліпсів i їх дуг

Процедура FILLELLIPSE малює зафарбований еліпс, використовуючи (X, Y) у вигляді центра, XR, YR як горизонтальну та прямовисну півосі. Звернення:

FILLELLIPSE(X, Y, XR, YR);

Наприклад, процедура

FILLELLIPSE(100, 90, 80, 30);

намалює заповнений еліпс з півосями 80 i 30 i центром в точці (100, 90). Еліпс зафарбовується поточним кольором i стилем заповнення, визначеними процедурою SETFILLSTYLE. Кордон накреслюється поточним кольором, визначеним SETCOLOR.

Процедура ELLIPSE малює еліптичну дугу від кута FH до FK, використовуючи (X, Y) як центр, XR та YR як горизонтальну i прямовисну півосі. Звернення:

ELLIPSE(X, Y, FH, FK, XR, YR);

Наприклад, процедура

ELLIPSE(100, 100, 0, 180, 50, 80);

намалює дугу еліпса від 0 до 180 градусів з центром у точці (100, 100) i півосями 50 i 80.

Процедура SECTOR малює i заповнює еліптичний сектор від FH до FK, використовуючи як центр точку (X, Y), а як горизонтальну та прямовисну півосі - XR i YR. Звернення:

SECTOR(X, Y, FH, FK, XR, YR);

Наприклад, процедура

SECTOR(300, 100, 180, 360, 100, 80);

намалює заповнений еліптичний сектор від 180 до 360 градусів i з півосями 100 i 80 із центром у точці (300, 100).

 

Креслення прямокутників i паралелепіпедів

Процедура RECTANGLE малює прямокутник, використовуючи поточний тип i колір лінії, визначені процедурами SETLINESTYLE i SETCOLOR. Звернення:

RECTANGLE(X1, Y1, X2, Y2);

Точка (X1, Y1) визначає верхній лівий кут прямокутника, а точка (X2, Y2) - правий нижній кут. Наприклад, процедура

RECTANGLE(100, 50, 400, 150);

намалює прямокутник зі сторонами 400-100=300 на 150-50=100 пікселів.

Процедура BAR малює зафарбований прямокутник, використовуючи поточний колір i стиль заповнення. Звернення:

BAR(X1, Y1, X2, Y2);

Процедура BAR3D малює зафарбований прямокутний паралелепіпед, використовуючи поточний колір i стиль заповнення. Звернення:

BAR3D(X1, Y1, X2, Y2, D, B);

Параметр D задає глибину контур в пікселях. Якщо D=0, то намалюється контур прямокутника, як у процедурі BAR. Якщо булевська змінна B=TRUE, то верхня грань паралелепіпеда малюється, якщо B=FALSE, то ні.

Наприклад, процедура

BAR3D(50, 50, 300, 150, 20, TRUE);

малює прямокутний паралелепіпед з координатами верхнього лівого кута (50, 50) i правого нижнього кута (300, 150). Глибина контуру 20 пікселів, верхня грань малюється.

 

Зафарбування контуру та постановка точки

Процедура FLOODFILL заповнює обмежену область поточним стилем заповнення, визначеним процедурою SETFILLSTYLE. Звернення:

FLOODFILL(X, Y, C);

Точка (X, Y) є внутрішньою точкою зафарбованої області. Кордон області малюється кольором, заданим параметром C. Наприклад, у фрагменті програми

SETFILLSTYLE(6, 1);

CIRCLE(100, 100, 50);

FLOODFILL(100, 100, 4);

процедура FLOODFILL заповнює коло шаблоном 6 i кольором 1; кордон області малюється кольором 4.

Процедура PUTPIXEL зображує точку з координатами (X, Y) піксель кольором C. Звернення:

PUTPIXEL(X, Y, C);

Наприклад, процедура

PUTPIXEL(M1*X, TRUNC(M2*SIN(X))+M3, GETMAXCOLOR);

розташована у циклі, що змінює параметр X, зобразить на екрані синусоїду максимальним кольором, де M1, M2 - масштаби за осями X i Y, що дозволяють вивести графік функції у прямокутник обраного розміру.

 

Рисування символів

Процедура SETTEXTSTYLE задає поточний шрифт, тип i коефіцієнт збільшення символів. Звернення:

SETTEXTSTYLE (F, D, K);

Параметр F задає тип шрифту; може змінюватися від 0 до 4. За умовчанням вибирається нормальний шрифт (F=0), бітове відображення якого складає 8х8 пікселів. Параметр D встановлює напрям зображення: 0 - горизонтальне, 1 - прямовисне. Параметр K задає коефіцієнт збільшення розмірів символів.

Процедура SETTEXTJUSTIFY задає параметри вирівнювання тексту, які використовуються процедурами OUTTEXT i OUTTEXTXY. Звернення:

SETTEXTJUSTIFY(H, V);

Параметр H задає горизонтальне вирівнювання: 0 - ліворуч, 1 - за центром, 2 - праворуч. Параметр V задає прямовисне вирівнювання: 0 - знизу, 1 - за центром, 2 - згори. За умовчанням задається вирівнювання ліворуч i знизу.

Процедура OUTTEXT посилає рядок символів на пристрій виводу в позицію поточного покажчика. Звернення:

OUTTEXT (ST);

Тут ST - змінна типу STRING. Якщо рядок надто довгий, то він відсікається за кордонами екрана.

Процедура OUTTEXTXY посилає рядок на пристрій виводу в позицію крапки (X, Y). Звернення:

OUTTEXTXY (X, Y, St);

 

Приклади написання програм із використанням

графічних процедур Паскаля

Приклад 42. Програма PR9, яка наведена нижче, дозволить продемонструвати можливості графічних процедур Паскаля у кресленні елементарних геометричних об'єктів.

 

PROGRAM PR42;

USES CRT, GRAPH;

VAR GD, GM: INTEGER; C: CHAR;

BEGIN

GD: = DETECT;

INITGRAPH(GD, GM, '');

SETFILLSTYLE(6, 1);

ELLIPSE(100, 90, 0, 360, 30, 50);

FILLELLIPSE(100, 90, 80, 30);

SECTOR(170, 145, 190, 340, 130, 50);

RECTANGLE(300, 70, 400, 190);

CIRCLE(500, 90, 60);

PIESLICE(500, 130, 180, 360, 60);

BAR(200, 20, 450, 50);

C: =READKEY;

CLOSEGRAPH

END.

 

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

 

PROGRAM PR43;

USES CRT, GRAPH;

VAR GD, GM, RADIUS, I: INTEGER; C: CHAR;

BEGIN

GD: = DETECT; INITGRAPH(GD, GM, '');

SETBKCOLOR(0); SETCOLOR(7);

FOR I: =1 TO 5 DO BEGIN

CLEARVIEWPORT;

SETVIEWPORT(30*I, 10*I, 100*I, 38*I, TRUE);

RECTANGLE(0, 0, 70*I, 28*I);

FOR RADIUS: =1 TO 6 DO

CIRCLE(35*I, 14*I, RADIUS*25);

SETFILLSTYLE(I, 1); FLOODFILL(35*I, 14*I, 1);

DELAY(800) END;

C: =READKEY;

CLOSEGRAPH

END.

 

Приклад 44. Програма PR11 дозволить виконати рисунок деталі, схематично наведений на рисунку 1.

 
 

PROGRAM PR44;

USES CRT, GRAPH;

VAR GD, GM, A, B, AL, H, M, D: INTEGER;

X1, X2, X3, X4, X5, X6, Y1, Y2, Y3, Y4, Y5, Y6,

XC, YC, YC1, YC2, XS, YS, XH1, XH2: INTEGER;

ST: STRING; C: CHAR;

BEGIN

CLRSCR; TEXTMODE(2);

TEXTDACKGROUND(7); TEXTCOLOR(0);

WINDOW(15, 5, 65, 15); CLRSCR; WRITELN;

WRITE(' ВВЕДІТЬ ДОВЖИНУ СТОРОНИ А= ');

READLN(A); WRITELN;

WRITE(' ВВЕДІТЬ ШИРИНУ B= ');

READLN(B); WRITELN;

WRITE(' ВВЕДІТЬ КУТ НАХИЛУ ПАРАЛЕЛОГРАМА AL= ');

READLN(AL); WRITELN;

WRITE(' ВВЕДІТЬ ШИРИНУ ПАЗА H= ');

REAADLN(H); WRITELN;

{ РОЗРАХУНОК КООРДИНАТ ВУЗЛОВИХ ТОЧОК }

D: =ROUND(B*COS(PI*AL/180)/SIN(PI*AL/180));

X1: =230; Y1: =30; X2: =X1+A-D; Y2: =Y1;

X3: =X2; Y3: =Y2+B; X4: =X1; Y4: =Y3;

X5: =X1-D; Y5: =Y4; X6: =X1+A; Y6: =Y1;

M: =ROUND(H/2);

{ ІНІЦІАЛІЗАЦІЯ ГРАФІЧНИХ ПРОЦЕДУР })

GD: =DETECT; INITGRAPH(GD, GM, '');

SETCOLOR(15);

SETBKCOLOR(0);

SETLINESTYLE(0, 0, 3);

{ КРЕСЛЕННЯ РИСУНКА }

RECTANGLE(X1, Y1, X3, Y3);

LINE(X1, Y1, X5, Y5); LINE(X5, Y5, X4, Y4);

LINE(X3, Y3, X6, Y6); LINE(X6, Y6, X2, Y2);

XC: =ROUND(0.5*(X1+X2));

YC: =ROUND(0.5*(Y2+Y3));

YC1: =YC+20; YC2: =YC-20;

XH1: =XC-M; XH2: =XC+M;

SETLINESTYLE(0, 0, 1);

ARC(XC, YC1, 180, 0, M); LINE(XH2, YC1, XH2, YC2);

ARC(XC, YC2, 0, 180, M); LINE(XH1, YC2, XH1, YC1);

SETFILLSTYLE(3, 15); FLOODFILL(X2+5, Y2+5, 1);

SETFILLSTYLE(6, 15); FLOODFILL(X4-5, Y4-5, 1);

{ ПРОСТАВЛЕННЯ РОЗМІРУ B }

XS: =X5-20; YS: =Y5+20;

LINE(X5, Y5, XS-10, Y5);

LINE(X1, Y1, XS-10, Y1);

LINE(XS, Y5, XS, Y1);

MOVETO(XS, Y5); LINEREL(-3, -5);

MOVETO(XS, Y5); LINEREL(+3, -5);

MOVETO(XS, Y1); LINEREL(-3, +5);

MOVETO(XS, Y1); LINEREL(+3, +5);

{ ПРОСТАНОВКА РОЗМІРУ A }

LINE(X5, Y5, X5, YS+5);

LINE(X3, Y3, X3, YS+5);

LINE(X5, YS, X3, YS);

MOVETO(X5, YS); LINEREL(+5, -2);

MOVETO(X5, YS); LINEREL(+5, +2);

MOVETO(X3, YS); LINEREL(-5, -2);

MOVETO(X3, YS); LINEREL(-5, +2);

{ ПРОСТАНОВКА РОЗМІРУ H }

LINE(XH1, YC, XH2, YC);

MOVETO(XH1, YC); LINEREL(+5, +2);

MOVETO(XH1, YC); LINEREL(+5, -2);

MOVETO(XH2, YC); LINEREL(-5, +2);

MOVETO(XH2, YC); LINEREL(-5, -2);

{ КРЕСЛЕННЯ ТЕКСТУ }

SETTEXTJUSTIFY(1, 0);

SETTEXTSTYLE(0, 0, 1);

STR(A, ST); OUTTEXTXY(X5+ROUND(A/2), YS-2, ST);

STR(H, ST); OUTTEXTXY(XC, YC-2, ST);

SETTEXTJUSTIFY(2, 1);

SETTEXTSTYLE(0, 1, 1);

STR(B, ST); OUTTEXTXY(XS-2, Y5-ROUND(B/2), ST);

SETTEXTSTYLE(0, 0, 2);

SETTEXTJUSTIFY(1, 0);

ST: =' РИСУНОК ДЕТАЛІ 10';

OUTTEXTXY(300, 20, ST);

C: =READKEY;

CLOSEGRAPH

END.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.