Графіка
1.
Графічний режим.
Графічний екран дисплея складається з точок, які можна засвічувати певним
кольором чи гасити, у результаті чого на екрані утворюється деяке зображення.
Точки називаються пікселями.
Кількість точок на екрані може бути різною, що залежить від якості екрана.
Розглянемо екран, який має 640 точок у горизонтальному (x) напрямку і 480 у
вертикальному (y). Початок відліку точок є у лівому верхньому куті екрана.
Кожна точка характеризується двома координатами (x,y). Приклади розташування на
екрані деяких точок показані на рис. 3.
![](file:///C:/Users/BE4A~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg)
Рис. 3. Координати точок на графічному
екрані 640х480
Програми, що виконують
графічні побудови, переважно є лінійними і складаються з викликів стандартних
графічних процедур та функцій, зібраних у модулі Graph.tpu.
Сам модуль може бути в
бiблiотеці Turbo.tpl або в деякому каталозі на диску. В останньому випадку
модуль треба приєднати командою uses на
початку програми. Потрібний також файл egavga.bgi
— драйвер для VGA адаптера чи файл
cga.bgi для відповідного CGA адаптера
монітора тощо.
Графічний
режим спочатку треба задати. Це виконують так:
<розділи
описів та оголошень конкретної програми>;
var driver, mode : integer; {Для характеристик дисплея}
begin
driver:= detect; {detect -
стандартна стала}
initgraph (driver, mode, ''); {Задання графічного режиму}
if graphresult < > 0 then
begin
writeln('графічний режим задати не
вдалося');
halt {Стоп}
end;
<текст конкретної програми з графічними
командами>
end.
|
2.
Процедури і функції для графічних побудов. Розглянемо процедури модуля
Graph, призначені для графічних побудов.
initgraph (driver, mode,
<шлях до драйвера>) — задає графічний режим. Шляхдо драйвера зазначають
(у лапках), якщо він не є в тому ж каталозі, що й файл turbo.exe;
detectgraph (<драйвер>,
<режим>) — повертає значення характеристикдисплея;
setcolor (<колір>) — задає
колір майбутнього зображення;
setbkcolor (<колір>) —
задає колір тла;
putpixel (x, y, <колір>)
— висвітлює точку (x,y) заданим кольором;
line (x1, y1, x2, y2) —
рисує лінію між двома точками;
lineto (x, y) — рисує лінію
від поточної точки до точки (x,y);
linerel (dx, dy) — рисує лінію
від поточної точки з заданими приростами;
rectangle (x1, y1, x2, y2) —
рисує прямокутник з заданими координатами діагонально протилежних вершин
(лівої верхньої та правої нижньої);
setviewport (x1, y1, x2, y2, true)
— задає координати нового графічного вікна. Логічна стала true задає режим
відсікання зображення, яке виходитиме за межівікна;
bar (x1, y1, x2, y2) —
рисує зафарбований прямокутник;
bar3d (x1, y1, x2, y2,
<об'ємна глибина>, true) — рисує паралелепіпед;
circle (x, y, R) — рисує коло
з радіусом R і центром у (x,y);
arc (x, y, <початковий
кут>, <кінцевий кут>, <радіус>) — рисує дугу;
pieslice (x, y, <початковий
кут>, <кінцевий кут>, <радіус>) — рисує зафарбований сектор;
ellipse (x, y, <початковий
кут>, <кінцевий кут>, <горизонт. радіус>,
<вертик.радіус>) — рисує еліпс чи дугу еліпса;
setfillstyle (<заповнення>,
<колір>) — задає спосіб заповнення замкнутоїобласті залежно від
значення параметра заповнення: 0 — заповнення кольоромфону, 1 — суцільне
заповнення, 2 — заповнення товстими горизонтальнимилініями, 3 — заповнення
нахиленими лініями, ..., 10 — заповнення точками,11—щільне заповнення
точками;
floodfill (x, y, <колір межі>)
— заповнює замкнену область, що містить точку(x,y);
closegraph — закриває графічний
режим;
outtext (<текст>) —
виводить заданий текст з поточної позиції;
outtextxy (x, y, <текст>) —
виводить текст у заданому місці;
settextstyle (<шрифт>,
<напрям>, <розмір>) — задає вигляд символів,напрямок виведення: 0
— горизонтально чи 1 — вертикально, і розміри символів: 1,2, 3.
|
Розглянемо
деякі функції модуля Graph:
graphresult — повертає код
помилки, якщо неможливо задати графічний режим, і 0 — у разі задання;
getmaxx — повертає значення
розміру екрана уздовж осі 0X;
getmaxy — повертає значення
розміру екрана уздовж осі 0Y;
getcolor — повертає значення
поточного кольору;
getcolor(x,y) — повертає значення
кольору точки (x,y);
getx, gety — повертають координати
поточного пікселя.
|
- Кольори. Кольори
задають числами або англійськими назвами:
black=0
– чорний;
blue=1 –
синій;
green=2
– зелений;
cyan=3 –
блакитний;
red=4 –
червоний;
magenta=5
– фіолетовий;
brown=6
– коричневий;
lightgray=7
– світло-сірий;
|
darkgray=8
– темно-сірий;
lightblue=9
– яскраво-синій;
lightgreen=10
– яскраво-зелений;
lightcyan=11
– яскраво-блакитн.;
lightred=12
– яскраво-червоний;
lightmagenta=13
– яскраво-фіол.;
yellow=14
– жовтий;
white=15
– білий.
|
Задача
1. Нарисувати
різними кольорами десять концентричних кіл, які мають спільний центр по
середині екрана, тобто в точці з графічними координатами (320; 240), і описати
навколо кіл червоний прямокутник.
program Circle10;
uses Crt, Graph;
var driver, mode, r :
integer;
begin clrscr;
driver := detect;
initgraph(driver, mode, '');
r := 10;
{Радіус
першого кола 10 пікселів}
while r <= 100 do
begin
setcolor(r div 10);
circle(320, 240, r);
r := r + 10
end;
setcolor(red);
rectangle(220, 140, 420,340); readln
end.
Задача
2.
Нарисувати емблему. У верхній лівій частині графічного екрана на чорному фоні
нарисувати блакитний квадрат, а в ньому – чорне коло, зафарбоване жовтим
кольором. У центрі емблеми чорними літерами написати слово “Льотниче”.
![](file:///C:/Users/BE4A~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg)
uses Crt,
Graph;
var driver,
mode, i, x1 , y1: integer; x, y: real;
begin
clrscr;
driver:=detect;
initgraph(driver,mode,'');
setbkcolor(0);
setcolor(3);
rectangle(100,0,300,200);
setfillstyle(1,3);
floodfill(200,100,3);
setcolor(14);
circle(200,100,100);
setfillstyle(1,14);
floodfill(200,100,14);
setcolor(0);
circle(200,100,100);
settextstyle(0,0,3);
outtextxy(135,95,
'Льотниче'); readln
end.
Задача
3.
Нарисувати графік функції y=2sin(2x)+1 на проміжку [0; 2p], табулюючи функцію з
кроком h=0,1. У результаті експериментів, міняючи значення амплітуди в пікселях
(за допомогою множника М), зобразити графік на екрані якнайкраще.
![](file:///C:/Users/BE4A~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg)
program GrafikSin;
uses Crt, Graph;
const a=0; b=2*pi; h=0.1;
h1=5; x0=60; y0=240; M=50;
var driver,
mode,x1,y1:integer; x,y:real;
function f(x:real):real;
begin
f:=2*sin(2*x)+1
end;
begin
clrscr;
driver := detect; initgraph(driver,mode,'');
setcolor(14); setbkcolor(1);
line(20,y0,600,y0); line
(x0,440,x0,20); {Координатні осі}
x:=a; x1:= x0+trunc(M*x); {x,y – математичні
координати}
y:=f(x); y1:=y0-trunc(M*y); {x1,y1 – графічні координати}
moveto(x1,y1);setcolor(15);
while x<=b do begin
y:= f(x); y1:=y0-trunc(M*y);
lineto(x1,y1);
x1:=x1+h1;x:=x+h
end;
settextstyle(0,0,1);
outtextxy(60,245,'0');outtextxy(360,245,'6.3');
settextstyle(0,0,2);
outtextxy(200,380,'Графік функції
y=2sin2x+1');readln
end.
Немає коментарів:
Дописати коментар