Графіка Турбо Паскаля

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Для використання графічних можливостей Турбо Паскаля необхідно в блоці опису uses підключити графічний модуль Graph. Модуль містить набір графічних функцій і процедур, основні з яких розглянуто нижче.

Графічні процедури

Arc (x, y: integer; St, En, R: word); {малювання дуги, де x, y - коорд. центру дуги, R - радіус, St, En - поч. і кінцевий кути. }

ClearDevice; {очищення екрана}

Circle (x, y: integer; R: word); {коло радіуса R

cцентром в точці (x, y)}

CloseGraph; {закриття графіки}

InitGraph (gd, gm: integer; Path: string); {ініціалізація графіки, де

gd - графічний драйвер,

gm - графічний режим,

Path - шлях розміщення файлу

з розширенням. bgi. }

Line (x1, y1, x2, y2: integer); {малювання лінії, що проходить через дві точки:

з координатами (x1, y1) та (x2, y2)}

LineRel (dx, dy: integer); {малювання лінії: dx, dy - прирости

координат до координат поточної

позиції курсору}

LineTo (x, y: integer); {малювання лінії, що проходить через поточну

позицію курсору і точку з координатами (x, y)}

Moveto (x, y: integer); {завдання координат поточної точки}

OutText (T: string); {виведення в поточну точку}

OutTextXY (x, y: integer; T: string); {висновок тексту в точку з координатами х, у}

Rectangle (x1, y1, x2, y2: integer); {малювання прямокутника: (x1, y1) та (x2, y2) - координати протилежних вершин}

PutPixel (x, y: integer; c: word); {виводить точку з координатами (х, у) кольором з}

Графічні функції

GetMaxX - визначає максимальний розмір екрану по осі x.

GetMaxY - визначає максимальний розмір екрану по осі y.

GetX - координата поточної позиції курсору по осі x.

GetY - координата поточної позиції курсору по осі y.

Машинні координати.

Початок машинної системи координат, напрямок осей, а також максимальні значення координат монітора показані на малюнку

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

x m = x 0 + x * M x,

y m = y 0-y * M y,

де M x, M y-масштаби відповідно по осях x і y, які показують кількість пікселів в одному фізичному одиниці,

x, y - фізичні координати точки,

x m, y m - машинні координати точки,

x 0, y 0 - машинні координати початку фізичної системи координат.

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

Етапи розробки програми зведені в таблицю.

Таблиця

N

Етапи програмування

Виконання

1.

Постановка завдання

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

2.

Математичний опис

Зобразимо вид екрану з зазначенням координат

необхідних ліній


3.

Розробка структограмми

4.

Написання програми

Program P5;

Uses graph; {підключення граф. модуля}

Var gd, gm: integer;

Begin

gd: = detect; {визначення граф. драйвера}

InitGraph (gd, gm, ''); {ініціалізація

графіки}

Line (0, round (GetMaxY / 2), GetMaxX,

Round (GetMaxY / 2)); {гориз. Лін. }

Line (round (GetMaxX / 2), 0, Round (GetMaxX / 2), GetMaxY);

{Вертик. Лін. }

Readln; {порожній введення}

CloseGraph; {закриття графіки}

End.

5.

Налагодження і отримання результатів

Виконати самостійно

Приклад. Написати програму побудови графіка функції y = x 2 для x [-1; 1].

Етапи розробки програми зведені в таблицю.

Таблиця

N

Етапи програмування

Виконання

1.

Постановка завдання

Побудувати графік функції y = x 2 для x [-1; 1].

2.

Математичний опис

Зобразимо вид екрану, який ми хотіли б отримати після виконання програми.

3.

Розробка структограмми

4.

Написання програми

Program P6;

Uses graph;

Var gd, gm: integer;

x, y: real;

x0, y0, xm, ym, Mx, My: integer;

begin

gd: = detect;

InitGraph (gd, gm, '');

Mx: = 300; x0: = 320; My: = 440; y0: = 460;

{Обрані для монітора 640 × 480 пікс.}

For xm: = 20 to 620 do

Begin

x: = (xm-x0) / Mx;

y: = sqr (x);

ym: = round (y0-y * My);

PutPixel (xm, ym, 1);

End;

Readln;

CloseGraph;

End.

5.

Налагодження і отримання результатів

Виконати самостійно

Модуль Graph

ТР має досить різноманітними засобами для роботи із стандартним VGA екраном (можливо також використання і та інших типів відеоадаптерів).

VGA адаптер має дозвіл 640х480 пікселів (точка (0,0) у лівому верхньому куті екрану), 16 кольорів.

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

Загальна структура графічної програми:

Uses crt, graph;

var Gd, Gm: Integer;

begin

Gd: = Detect;

InitGraph (Gd, Gm, 'c: \ bp \ bgi');

...

{Тут побудова зображення}

...

ReadKey;

CloseGraph;

end.

Шлях c: \ bp \ bgi вказує розташування файлу egavga. bgi (драйвер графічного адаптера). На різний комп'ютерах цей шлях може бути різним. Якщо файл egavga. bgi помістити в каталог з програмою, то шлях можна не вказувати.

Основні графічні процедури та функції:

Побудова фігур

PutPixel (x, y, c) - відображає на екрані точку з координатами (x, y) і кольором c

Line (x1, y1, x2, y2) - малює лінію з початком в точці (x1, y1) і кінцем - (x2, y2)

Rectangle (x1, y1, x2, y2) - малює контур прямокутника з діагоналлю (x1, y1) - (x2, y2)

Bar (x1, y1, x2, y2) - малює зафарбований прямокутник з діагоналлю (x1, y1) - (x2, y2)

Circle (x, y, r) - малює коло з центром (x, y) і радіусом r

Ellipse (x, y, ba, ea, xr, yr) - малює дугу еліпса з центром в (x, y), горизонтальним і вертикальним радіусом xr і yr, і початковим і кінцевим кутом ba і ea

FillEllipse (x, y, xr, yr) - малює зафарбований еліпс з центром в (x, y), горизонтальним і вертикальним радіусом xr і yr

Визначення кольорів і стилів

GetPixel (x, y) - повертає колір пікселя з координатами (x, y)

SetColor (c) - встановлює колір зображення (для ліній)

SetFillStyle (p, c) - встановлює поточний стиль p і колір c (для "зафарбованих" фігур)

FloodFill (x, y, b) - зафарбовує замкнуту область з внутрішньої точкою (x, y) і кольором контуру b

Робота з текстом

OutTextXY (x, y, st) - виводить на екран рядок st з позиції (x, y)

SetTextStyle (f, d, s) - встановлює шрифт f, його напрям d і розмір

Повідомлення про помилки

function GraphErrorMsg (ErrorCode: integer): String; Повертає рядок повідомлення про помилку для заданого коду ErrorCode.

function GraphResult: integer; Повертає код помилки для останньою графічної операції.

Визначення адаптера, ініціалізація і перехід між текстом і графікою

procedure DetectGraph (var GraphDriver, GraphMode: integer); Перевіряє апаратуру і визначає який графічний драйвер і в якому використовується режимі (тип адаптера - у GraphDriver, режим - GraphMode).

function GetDriverName: string; oзвращает рядок з ім'ям поточного драйвера.

procedure InitGraph (var GraphDriver: integer; var GraphMode: integer; PathToDriver: String); ініціалізує графічну систему і встановлює пристрій в графічний режим. PathToDriver - повний шлях до драйвера. bgi, звичайно 'c: \ tp \ bgi'. Якщо шлях опущений (''), то драйвер повинен знаходиться в поточному каталозі.

function RegisterBGIfont (Font: pointer): integer; Реєструє шрифт BGI для графічної системи. Зареєстрований фонт може використовуватися у виклику SetTextStyle. Він може бути завантажений з диска в купу або перетворений в. obj файл (за допомогою binobj. exe) і пов'язаний у файл. exe. У випадку помилки функція повертає від'ємне значення.

function RegisterBGIdriver (Driver: pointer): integer; Реєструє драйвер BGI для графічної системи. Зареєстрований драйвер буде використовуватися процедурою InitGraph. Він може бути завантажений з диска в купу або перетворений в. obj файл (за допомогою binobj. exe) і пов'язаний у файл. exe. У випадку помилки функція повертає від'ємне значення.

function InstallUserDriver (DriverFileName: string; AutoDetectPtr: pointer): integer; Встановлює користувальницький драйвер пристрою в BGI таблицю драйверів пристроїв.

function InstallUserFont (FontFileName: string): integer, Встановлює новий шрифт, який не вбудований в BGI систему.

procedure SetGraphBufSize (BufSize: word); Дозволяє змінити розмір буфера для функцій заповнення (закрасок). Буфер з розміром BufSize байт розміщується в купі при зверненні до InitGraph. За замовчуванням розмір 4К, що достатньо для побудови багатокутника з 650 лініями.

function GetMaxMode: integer; Повертає номер максимального режиму поточного завантаженого драйвера.

procedure GetModeRange (GraphDriver: integer; var LoMode, HiMode: integer); Повертає мінімальний і максимальний графічні режими для цього драйвера.

function GetModeName (GraphMode: integer): string; Повертає рядок з ім'ям зазначеного графічного режиму.

procedure SetGraphMode (Mode: integer); Перекладає систему у вказаний графічний режим і очищує екран.

function GetGraphMode: integer; Повертає поточний графічний режим.

procedure GraphDefaults; Встановлює поточний покажчик (CP) у вихідну позицію (тобто точку 0,0) і скидає всі встановлювані користувачем режими в початковий стан, у т. ч. вікна, палітру, основний колір і колір фону, стиль ліній, шрифт, вирівнювання тексту, розмір символів і стиль виведеного тексту. Система повинна знаходитися в графічному режимі.

procedure RestoreCrtMode; Відновлює текстовий відеорежим, який був до ініціалізації графіки. Не звільняє буфер і не обнуляє встановлені змінні.

procedure CloseGraph; Закриває графічну систему. Відновлює текстовий відеорежим, який був до ініціалізації графіки. Звільняє буфер і скидає всі графічні змінні.

Координати графічного курсору

function GetX: integer; Повертає координату X поточної позиції (CP).

function GetY: integer; Повертає координату Y поточної позиції (СР).

function GetMaxX: integer; возврашалась максимальний Х (дозвіл по горизонталі) для поточного графічного драйвера і режиму.

function GetMaxY: integer, Повертає максимальний Y (дозвіл по вертикалі) для поточного графічного драйвера і режиму.

Відмінності графіки Турбо-Паскаля і Турбо-Сі

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

НЕДОЛІКИ BGI-ГРАФІКИ

Незважаючи на великі можливості для ділової графіки, графічні засоби з точки зору професійного розробника залишають бажати кращого. Не можна працювати з довільними спрайтами, немає скролінгу екрану, збереження / виводу всього зображення, масштабування картинки, функції заповнення та роботи з бітовими образами працюють повільно, неможливе використання файлів інших графічних форматів, відсутні тривимірні зображення і т.д. Все це утруднює написання графічних редакторів, іграшок, систем інженерного та математичної графіки. Для реалізації вищевказаних можливостей необхідно безпосередньо керувати графічним адаптером, використовуючи прямий доступ в відеопам'ять і службові функції BIOS.

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Реферат
31.2кб. | скачати


Схожі роботи:
Етапи складання графіка документообігу і графіка облікових робіт на підприємстві
Етапи складання графіка документообігу і графіка облікових робіт
Випуклість і вгнутість графіка функції точки перегину Асимптоти графіка функції Схема дослідж
Містика вогню у Паскаля і Башляра
Теорія ймовірностей Від Паскаля до Колмогорова
Механiзацiя лiчби Машина Паскаля Рахiвниця
Турбо відладчик Turbo Debugger
Знайомство із середовищем Турбо Паскаль
Прямий доступ у системі Турбо Паскаль
© Усі права захищені
написати до нас