Модуль Graph представляет собой библиотеку подпрограмм Turbo
Pascal, обеспечивающих полное управление графическими режимами
различных мониторов — CGA, EGA, VGA, SVGA. Библиотека содержит
более 50 графических процедур и функций, как базовых (рисование
точек, линий, окружностей и т.п.), так и расширяющих возможностей
базовых (многоугольники, закрашивание фигур, вывод текста и др.).
Для запуска программ, использующих модуль Graph, должен быть
доступен драйвер egavga.bgi. Для компиляции программ должен быть
доступен модуль GRAPH.TPU.
Основные директивы модуля GRAPH
Uses GRAPH — подключение модуля GRAPH.
InitGraph(gd,gm,’c:tp7′) — инициирование графического режима,
указываем gd-графический драйвер, gm-графическую мода и полный
путь файла поддержки графики egavga.bgi: c:tp7.
ClearDevice — очистка экрана в графическом режиме.
SetColor(14) — установка цвета рисуемых линий.
SetBkColor(1) — установка цвета фона.
SetLineStyle(0,0,3) — установка толщины линий.
SetFillStyle(5,11) — установка стиля и цвета закраски. Число сти-
лей закраски = 0-11.
PutPixel(300,250,15) — рисование точки (X, Y, C), где X, Y -коор-
динаты точки, C — цвет точки. С=0-15.
Line(25,100,100,200) — рисование отрезка прямой линии
(X1,Y1,X2,Y2), где X1,Y1-координаты начала отрезка; X2,Y2-коор-
динаты конца отрезка прямой линии.
Rectangle(25,100,100,200) — рисование прямоугольной рамки
(X1,Y1,X2,Y2), где X1,Y1 и X2,Y2 — координаты соответственно
начала и конца диагонали левого верхнего угла.
Bar(20,70,210,50) — рисование закрашеннго прямоугольника
(X1,Y1,X2,Y2), где X1,Y1 и X2,Y2 — координаты соответственно
начала и конца диагонали левого верхнего угла.
Circle(300,250,80) — рисование окружности (X, Y, R), где X, Y —
координаты центра окружности, R — радиус окружности.
Arc(300,250,135,45,60) — рисование дуги окружности (X,Y,Ф1,Ф2,R),
где Ф1,Ф2 — начальный и конечный углы дуги. X,Y,R — см. выше.
PieSlice(100,100,30,120,70) — рисование сектора окружности
(X,Y,Ф1,Ф2,R).
Ellipse(300,250,0,360,95,40)-рисование эллипса (X,Y,Ф1,Ф2,R1,R2).
Ф1,Ф2 — начальный и конечный углы. R1, R2 — радиусы эллипса.
Sector(400,100,90,290,200,80)- рисование сектора эллипса
(X,Y,Ф1,Ф2,R1,R2).
FillEllipse(X,Y,R1,R2) — рисование закрашенного эллипса
(или окружности при R1=R2).
OutTextXY(25,30,’Текст.’) — вывод текста (X, Y, ‘Текст’).
CloseGraph — закрытие графического режима.
Ниже приведены примеры программ, использующих модуль Graph и
Graph0 (модуль Graph0 — графика для начинающих, упрощенный модуль
Graph). Из комментариев к ним можно узнать о конкретном использо-
вании основных директив модуля Graph при создании простейших гра-
фических изображений.
Пример 1.
Program Ris1;
uses Crt,Graph;
var gd,gm:integer; {gd-графический драйвер, gm-графическая мода}
begin
gd:=detect; {Автоматически определяем графический драйвер}
InitGraph(gd,gm,’c:tp7′); {Инициируем графический режим, указы-
ваем полный путь файла egavga.bgi}
SetLineStyle(0,0,3); {Задаем толщину линии}
SetColor(LightMagenta); {Задаем цвет линии}
SetFillStyle(1,LightGreen); {Задаем стиль и цвет закраски}
PieSlice(100,100,30,120,70); {Рисуем сектор окружности, X,Y,Ф1,Ф2,R}
SetColor(White); {Задаем цвет линии}
SetFillStyle(5,11); {Задаем стиль и цвет закраски}
Sector(400,100,90,290,200,80); {Рисуем сектор эллипса, X,Y,Ф1,Ф2,R1,R2}
Readkey; {Обеспечиваем задержку изображения и выход из программы при
нажатии любой клавиши, например Esc, Enter, Пробела}
CloseGraph {Закрываем графический режим}
end.
Пример 2.
Program Grafika;
uses Crt,Graph,Graph0; {Подключаем модули CRT, GRAPH, GRAPH0}
begin
Init(‘c:tp7’); {Указываем полный путь файла egavga.bgi}
SetColor(14); {Задаем цвет рисуемых линий}
SetLineStyle(1,0,ThickWidth); {Задаем тройную толщину линии}
SetBkColor(1); {Задаем цвет фона}
Circle(300,250,120); {Рисуем окружность, X, Y, R}
SetColor(11);
Circle(300,250,100);
SetColor(13);
Circle(300,250,80);
SetColor(10);
Arc(300,250,135,45,60); {Рисуем дугу, X, Y, Ф1, Ф2, R}
SetColor(12);
Ellipse(300,250,0,360,95,40); {Рисуем эллипс, X, Y, Ф1, Ф2, R1, R2}
PutPixel(300,250,15); {Рисуем точку, X, Y, C}
SetColor(15);
OutTextXY(25,30,’Графика в Turbo Pascal.’); {Вывод текста, X, Y, ‘Текст’}
SetColor(11);
OutTextXY(160,450,’Для выхода из программы нажмите Esc.’);
SetFillStyle(1,14); {Задаем вид закраски (0-11) и цвет закраски С}
Bar(20,70,210,50); {Рисуем закрашенный прямоугольник, X1,Y1,X2,Y2}
SetColor(11);
Rectangle(25,100,100,200); {Рисуем прямоугольную рамку, X1,Y1,X2,Y2}
SetColor(14);
Line(25,100,100,200); {Рисуем прямую линию, X1,Y1,X2,Y2}
Readkey;
CloseGraph;
end.
Здесь X, Y, X1, Y1, X2, Y2 — координаты основных точек на экране;
Ф1, Ф2 — углы дуг, круговых и эллиптических секторов;
R, R1, R2 — радиусы окружностей, эллипсов, дуг и секторов.
С — цвет линий (0-15).
Пример 3. Флаг России.
program Flag_RUS;
uses CRT,Graph,Graph0;
begin
Init(‘c:tp7’);
SetFillStyle(1,15);
Bar(0,0,320,50);
SetFillStyle(1,1);
Bar(0,51,320,101);
SetFillStyle(1,4);
Bar(0,102,320,152);
ReadKey;
CloseGraph;
end.
Примеры программ построения графиков функций:
1. Построение графика параболы в декартовых координатах (путь
S(t)=gt2/2 при свободном падении тела). Построение производится
по точкам.
Program Put3;
uses Crt,Graph,Graph0;
var t1,S,H,n:integer;Y,g,dt,t:real;
begin
Init(‘c:tp7’);
SetColor(14);
OutTextXY(25,30,’Путь S(t)=gt2/2 при свободном падении.’);
OutTextXY(25,50,’Выход — любая клавиша.’);
SetColor(10);
Line(0,470,550,470);
Line(0,0,0,470);
g:=9.81;
t:=0;
n:=100;
repeat
Y:=g*t*t/2;
dt:=1/(n+1);
t:=t+dt;
t1:=round(6*t);
S:=round(Y);
H:=round(470-S/70);
PutPixel(t1,H,11);
until t>80;
Readkey;
CloseGraph;
end.
2. Построение графика функции (улитки Паскаля) в полярных коорди-
натах. Если в прямоугольных (декартовых) кординатах задают точку
A на плоскости по её координатам x, y, то в полярных координатах
точку задают по её радиус-вектору R и углу fi между вектором R и
осью X (смотрите чертёж на рисунке). Функция в декартовых коорди-
натах имеет вид y=f(x), в полярных координатах R=F(fi). Связь
между декартовыми и полярными координатами: x=R*cos(fi),
y=R*sin(fi), R=SQRT(x*x+y*y).
Program Ulitka;
uses crt, graph, graph0;
const xc=320; yc=175; k=0.775;
var fi,dfi,R,a:real; x1,y1,x2,y2,n:integer;
Function F(fi:real):real;
begin F:=a/2+a*cos(fi);
end;
begin
clrscr;
writeln(‘Улитка Паскаля: R=1+a*cos(fi).’);
write(‘Введите коэффициент a=0.5-2; a=’);
read(a);
a:=100*a;
write(‘Введите число точек n>=100; n=’);
read(n);
init(‘C:TP7’);
cleardevice;
outtextxy(10,10,’Улитка Паскаля: R=1+a*cos(fi).’);
setcolor(10);
line(xc,0,xc,349);
line(0,yc,639,yc);
dfi:=2*pi/n;
x1:=xc; y1:=yc; fi:=0;
while fi