Графічний режим
Графіка в ТР підтримується стандартним модулем Graph, який має більше 90 стандартних графічних процедур и функцій, а також опис різних констант, які використовуються цими підпрограмами. Модуль Graph не включений в бібліотеку ТР, не входить у файл turbo.tpl і для реалізації графічних можливостей повинен бути розміщений у поточному каталозі файл Graph.tpu. Для запуска програми, яка використовує модуль Graph необхідно мати один або декілька графічних драйверов – це файли з розширенням bqi. Якщо використовуються штрихові шрифти – потрібні також файли з розширенням chr.
Можливості графічного режима визначаються типом адаптера дисплея (монітора CGA, EGA, VGA і т. д. – кількість точок по координатам x і y, монохромний, кольоровий).
VGA– стандарт гарантує починаючи з 0 640 х 480 точок з 16 кольорами у кожній.
Включення і виключення графічного режима
Текстовий и графіческий режими не можуть функціонувати сумісно.
Включення графічного режиму:
Uses Crt,Graph;
Var Gd, Gm: integer;
Begin
Gd:=detect;
InitGraph(Gd, Gm, '');
…
End.
Процедура InitGraph переводить апаратуру в графічний режим, наявність трьох параметрів обов’язкова:
1-й параметр (Gd) визначає який графічний драйвер повинен бути використаний. В якості значення цього параметра використовується значення, що задане в модулі Graph константи Detect. Якщо Detect=0 – потребується автоматичне розпізнання графічного драйвера.
2-й параметр (Gm) встановлює один з можливих графічних режимів для даного типу адаптера дисплея – 0,1,2,3,..
3-й параметр – шлях доступу до каталогу, в якому знаходиться графічний драйвер: C:\TP70\BGI
По замовчанню – '' – у поточному каталозі.
В програмі необхідно передбачити вихід із графічного режима в текстовий, для чого організувати цикл очікування для перегляду графічної картинки:
…
Repeat Until Keypressed;
CloseGraph;
…
Відсутність у програмі CloseGraph приводить до зависання ПЭВМ.
Процедура CloseGraph визволяє пам’ять від графічного драйвера та поновлює попередній режим. Використовуючи процедури RestorCrtMode і SetGraphMode, можна здійсниити перехід як у текстовий так і в графічний режими, наведена нижче програма илюструє таку можливість.
Uses Crt,Graph;
Var Gd, Gm: integer;
Begin
Gd:=detect;
InitGraph(Gd, Gm, '');
Outtext('Для виходу з графічного режиму нажміть Enter');
Readln;
RestorCrtMode;
Clrscr;
Writeln('Тепер ви у текстовому режимі');
Write('Для переходу у графічний нажміть Enter ');
Readln;
SetGraphMode(GetGraphMode);
OuttextXY(0,0,' Ви знову у графічному режимі');
Readln;
CloseGraph
End.
RestorCrtMode - повертає екран в початковий стан, той, який існував до иніціалізації графічного режима.
SetGraphMode (<режим>) - устанавливает графічний режим и очищує екран.
GetGraphMode - призначає поточним тот графічний режим, який був встановлений процедурою InitGraph.
Система координат
Верхній лівий кут (0,0); розмір екрана залежить від монітора.
Вивід графічного текста може здійснюватись викликом процедур OutText или OutTextXY.
Встановлення шрифта можно виконати за допомогою процедури SetTextStyle.
Наведені для илюстрації програми підтримують можливості графічного режиму - для малювання, заповнення фігур, включаючи точку, лінії, кола, дуги, прямокутники,..
Для встановлення товщини і типу лінії використується процедура SetlineStyle.
Повний набір процедур можно одержати використавши Menu Help.
Приклади графічних програм
{Заповнення екрана відрізками випадкової довжини}
Uses Crt,Graph;
Var Gd, Gm: integer;
Begin
Gd:=detect;
InitGraph(Gd, Gm, '');
Randomize;
Repeat
Line(random(640),random(200),random(640),random(200));
Until Keypressed;
Delay(1000);
CloseGraph
End.
{Заповнити екран різнокольоровими колами}
Uses Crt,Graph;
Var Gd, Gm, x, y, i,c: integer;
Begin
Gd:=detect;
InitGraph(Gd, Gm, '');
For i:=0 to 39 do
Begin
y:=(i div 8)*40+20;
x:=(i mod 8)*40+20;
For c:=0 to 5 do
Begin
Setcolor(c);
Circle(x,y,(c+1)*5)
End
End;
ReadKey;
CloseGraph
End.
{SetColor - встановлює колір малюнка.
Circle(x,y,r) -малює коло}
{В графічному режимі написати слово 'Привіт' у центрі екрану}
Uses Crt,Graph;
Var Gd, Gm, x, y, i,c: integer;
Begin
Gd:=detect;
InitGraph(Gd, Gm, '');
SetLineStyle(0, 0,3);
Rectangle(0,0,GetmaxX,GetmaxY);
SetLineStyle(0, 0,1);
OutTextXY(GetmaxX div 2, GetmaxY div 2,'Привіт');
Readkey;
Closegraph
End.
SetLineStyle(<тип рядку>, <зразок>, <товщина>) - встановлює товщину та стиль лінії.
Rectangle(x1, y1, x2, y2) - процедура малювання прямокутника.
x1,y1;x2,y2- координати лівого верхнього кута, правого нижнього.
SetTextStyle(<тип шрифта>, <напрям>, <розмір>) - встановлює поточний шрифт,стиль і розмір текста.
Шрифт: 0-64.
Напрям: 0- зліва направо; 1-знизу вверх.
Розмір: 0-10
Побудова графіків функцій
Побудувати графік функції y=f(x) на заданій множині А, де x є A множина точок на площині з координатами u,v.
На екрані дисплея видима ділянка, куди ми хочемо помістити графік:
D={(x,y): x1<=x<=x2, y1<=y<=y2}
Для того, щоб графік помістився на ділянці D необхідно виконати перетворення, аба масштабування; за необхідності збільшити або зменшити значения координат по осям х та у для того, щоб графік був відображений на всій виділеній для нього ділянці та щоб зображення було досить наглядним.
Відповідні перетворення координат точок (u,v) функції y=f(x) у фізичні координати робочої ділянки графічного екрану здійснюються за формулами:
X=x1+ (x2-x1)(u-umin)/(umax- umin);
y=y1+ (y2-y1)(v- vmin)/(vmax- vmin),
де umax и umin, vmax и vmin - найбільше та найменше значення функції y=f(x) на множині А.
Якщо u зміниться від umin до umax - x зміниться від x1 до x2.
Якщо v зміниться від vmin до vmax - y зміниться від y1 до y2, але у1>у2, тобто у зменшується.
Осям координат v=0 и u=0 на графічному екрані відповідають прямі:
X=x1- (x2-x1)* umin/(umax - umin); | line(x1,y,x2,y)| - вісь у
Y=y1- (y2-y1)* vmin/(vmax - vmin); | line(x1,y,x2,y)| - вісь x.
Алгоритм побудови графіка y=f(x)
1. Задати початкове значення відрізка a,b.
2. Задати кількість точок графіка n.
3. Обчислити крок змінення по осі х: h=(b-a)/n.
4. Обчислити масиви значень х і у:
For i:=1 to n do
Begin
X[i]:=a+h*(i-1);
Y[i]:=<за формулою>
End;
5. Знайти крок в пікселях по осі х.
deltax:= round(640/(x[n]- x[1]));
6. Крок в пікселях по осі y:
- знайти ymax, ymin
- deltay=round(350/(ymax-ymin));
7. Побудувати графік:
- встановити вказівник в точку з координатами (1,y[1]) в пікселях (MoveTo).
- lineto(x[i],y[i]) провести лінію від поточної точки в задану.