- •Лабораторная работа № 7 разработка паскаль-программ с использованием графических процедур и функций
- •7.1 Цель работы
- •7.2 Задание на лабораторную работу
- •7.3 Возможности и методы модуля Graph
- •7.3.2 Константы
- •7.3.3 Процедуры и функции
- •7.4 Требования к программе
- •7.5 Порядок выполнения работы
- •7.6 Размещение графической информации на экране
- •7.7 Алгоритм построения графика функции
- •7.8 Рекомендации по выполнению лабораторной работы
- •7.8.3. Поиск экстремумов нелинейных функций.
- •7.9 Варианты заданий
- •7.10 Содержание отчета
7.8 Рекомендации по выполнению лабораторной работы
7.8.1 Структура графической Паскаль-программы.
В настоящее время более 50 стандартных графических процедур и функций содержится в стандартном модуле Graph.tpu. Чтобы воспользоваться возможностями модуля graph.tpu, необходимо иметь компьютер, оснащенный видеоадаптером. В состав модуля Graph входит ряд программ-драйверов для наиболее распространенных видеоадаптеров: CGA, MCGA, EGA, VGA, SVGA, Hercules, AT&T, 3270 PC. Эти драйверы хранятся в файлах с расширением .BGI (Borland Graphic Interface). Для множества символов имеются файлы описаний с расширением .CHR.
Любая программа Turbo Pascal, использующая графические процедуры и функции из модуля Graph, имеет следующую типовую структуру:
program prog graph;
uses Graph, Crt,......;
var grDriv, grMod : integer,
к
од
графического режима •
код видеографического устройства
…
{ Процедуры и функции}
function F(var x: real) : real
begin
…
end;
…
begin
write('Bведите XN, XK:'); { Ввод исходных данных }
readln(Xn, Xk); { в текстовом режиме }
write('Введите количество точек графика: ');
readln(N);
{ Вычисление Yn и Yk и шага изменения аргумента h }
…
{———— Инициализация графического режима ————}
grDriv := Detect;
I nitGraph(grDriv, grMod, 'D:\TP\BGI');
{ путь к графическому драйверу)
{—-—-— Проверка успешного завершения инициализации ———)
if GraphResult <> GrOK then begin
writeln('Ошибка!!!');
{... обработка кода ошибки.....}
delay(lOOO);
exit
end;
{—————— Основная часть программы ——————}
XNE:=...; { Задание области вывода графика;}
YNE:=...; (можно вводить с клавиатуры или задавать) Xke:=...; {в программе }
Yke:=...;
Мх:=...; { Расчет масштабов )
Му:=..;
… { Установка цветов, типов линий и др.)
х:=хn; { Переход в начало графика }
x:=x+h;
while x < xk do
begin
y:=F(x);
{ Черчение отрезка прямой от предыдущей точки к }
{точке(x,у)}
end;
{ Черчение осей координат }
{Вывод текста }
repeat
until KeyPressed;
…
{———— Завершение графического режима —————)
CloseGraph
end.
7.8.2 Справочная информация по графическим процедурам и функциям
Графические процедуры и функции, включенные в модуль Graph, можно разделить на следующие группы:
- управляющие графические процедуры и функции;
- графические процедуры и функции для формирования экрана, окна, страницы ;
- графические процедуры и функции для работы с точечными изображениями;
- графические процедуры и функции для работы с графическими примитивами типа "линия";
- графические процедуры и функции для работы с дугами, фигурами, штриховкой;
- графические процедуры и функции для работы с цветом и палитрой;
- графические процедуры и функции для работы с текстом.
Управляющие графические процедуры и функции:
InitGraph (var gt,gm:integer;tpf:string) - процедура.
Инициализирует графический режим работы, код которого возвращается в переменной gm.
В переменной gt пересылается код соответствующего графического драйвера, для этого в модуле Graph.tpu определены следующие константы:
const detect = 0;
CGA=1;
MCGA=2;
EGA=3;
CGA=9;
PC3270=10;
Если перед инициализацией графического режима переменной gt присвоить значение 0, что соответствует константе Detect (см. пример раздела 7.8.1), то графический драйвер выбирается автоматически и определяется подходящий графический режим gm. Путь доступа к графическому драйверу (с расширением .BGI) должен задаваться в строковой переменной tpf. Если здесь стоит пустая строка ' ', то InitGraph осуществляет поиск в текущем каталоге.
CloseGraph - процедура. Удаляет графический драйвер из памяти и осуществляет переход в тот текстовый режим, который бьл установлен перед вызовом InitGraph.
GraphResult - функция. Значением функции является код ошибки последней графической операции. Если значение функции равно 0, это соответствует нормальному завершению последней графической операции.
GraphErrorMsg (errcode:integer) - функция. Генерирует сообщение об ошибке, соответствующее коду ошибки errcode, значение которого определяет функция GraphResult.
Графические процедуры и функции для формирования экрана, окна, страницы:
ClearDevice - процедура. Гасит экран и устанавливает параметры графического драйвера на стандартное значение.
SetViewPort (xl,yl,x2,Y2:intеgеr;clip:boolean) - процедура. Создает окно с левым верхним углом (х1,у1) и правым нижним углом (х2,у2), устанавливая при этом курсор в верхний левый угол окна. Параметр clip устанавливает, пересекают ли символы границы окна.
ClearViewPort - процедура. Содержимое окна гасится и окрашивается в цвет, заданный фоновым.
SetVisualPage (p:word) - процедура. Некоторые графические адаптеры ( например, EGA, VGA, Hercules) поддерживают несколько страниц. Процедура SetVisualPage устанавливает, какая страница видна.
SetActivePage (p:word) - процедура. Устанавливает, на какой странице строится изображение.
GetMaxX - функция. Возвращает максимально возможную координату Х для установленного драйвера и режима.
GetMaxY - функция. Возвращает максимально возможную координату Y для установленного драйвера и режима.
Графические процедуры и функции для работы с точечными изображениями:
PutPixel (x,y:integer;col:word) - процедура. В точке с координатами (х,у) рисуется точка, цвет который определяется значением переменной col.
GetPixel (x,y:integer) - функция. Возвращает номер цвета элемента графического изображения в точке с координатами (х,у).
GetX - функция. Возвращает координату Х текущей позиции курсора.
GetY - функция. Возвращает координату Y текущей позиции курсора.
Графические процедуры и функции для работы с графическими примитивами типа "линия":
Line (xl,yl,x2,y2:integer) - процедура. Вычерчивает отрезок прямой от точки (х1,у1) до точки (х2,у2). Тип линии устанавливается процедурой SetLineStyle. Положение курсора не меняется.
LineTo (х,у: integer) - процедура. Вычерчивает отрезок прямой из текущей позиции курсора до точки (х,у). После вызова процедуры положение курсора (х,у).
LineRel (dx,dy:integer) - процедура. Курсор находится в позиции (х,у), начиная с которой вычерчивается прямая до точки (х+dx, y+dy).
MoveTo (x,y:integer) - процедура. Устанавливает курсор в точку (х,у).
MoveRel (dx,dy:integer) - процедура. Перемещает курсор из текущей позиции (х,у) в точку (x+dx,y+dy).
SetLineStyle (stil,muster,w:word) - процедура. Устанавливает тип линии для следующих операций над графическими изображениями ( Line, LineTo, Arc, Circle, DrawPoly, Rectangle ). Для переменной stil в модуле Graph определены следующие константы:
const
solidln = 0; { сплошная линия }
dotteln = 1; { пунктирная линия }
centerln = 2; { штрихпунктирная линия}
dasheln = 3; { штриховая линия }
userbitln = 4; { определенная пользователем линия }
Параметр muster имеет значение только при stil = userbitln. Для параметра w определены следующие константы:
const
normwidth = 1; { обычная толщина }
thickwidth = 3; { жирная линия )
Графические процедуры и функции для работы с дугами, фигурами, штриховкой:
Arc (x,y:integer;w1, w2, r:word) - процедура. Из центра (х,у) вычерчивает дугу радиусом г от угла wl до угла w2. Угол задается в градусах.
Circle (x,y:integer;r:word) - процедура. Вычерчивает окружность радиусом r с центром в точке (х,у).
Rectangle (xl,yl,x2,y2:integer) - процедура. Вычерчивает прямоугольник с координатами левого верхнего угла (х1,у1) и координатами правого нижнего угла (х2,у2).
Bar (xl,yl,x2,y2:integer) - процедура. Вычерчивает прямоугольник с координатами левого верхнего угла (xl,yl) и координатами правого нижнего угла (х2,у2), причем прямоугольник закрашивается в соответствии с образцом, заданным процедурами SetFillStyle или SetFillPattern.
Bar3d (xl,yl,x2,y2:integer;t:word;top:boolean) - процедура. Вычерчивает трехмерный брусок с прямоугольным основанием с координатами (х1,у1) и (х2,у2). Переменная t задает пространственную глубину в элементах изображения. Прямоугольник заполняется в соответствии с образцом, заданным процедурами SetFillStyle или SetFillPattern. Переменная top задает, должен ли брусок иметь верхнее замыкание или нет.
DrawPoly (an:word;var p) - процедура. Вычерчивает многоугольник с an вершинами. Переменная р является массивом, содержащим координаты вершин, то есть переменная р имеет тип аггау[1..аn] of pointtype, где
type pointtype = record
х,у: word;
end;
FillPoly (an:word;var p) - процедура. Вычерчивает многоугольник с an вершинами. Координаты точек могут задаваться через определенный в модуле graph тип pointtype. После того как многоугольник построен (последняя точка должна совпадать с первой, чтобы ломанная замкнулась), он заполняется в соответствии с образцом, определенными процедурами SetFUlStyle или SetFUlPattern.
SetFUlStyle (muster,f:word) - процедура. Устанавливает образец для заполнения площадки. Для muster существуют следующие константы:
const
emptyfill = 0; { Заполнение цветом фона )
solidfill = 1; { Сплошное заполнение }
linefill=2; {——}
Ltslashfill=3; {\\\\}
slashfill = 4; {\\\\, линии утолщенные}
bkslashfill = 5; {////,линии утолщенные }
Ltbkslashfill=6; {////}
hatehfill = 7; { легкая штриховка}
xhatchfill = 8; { частая штриховка, пересекающаяся } interleavefill = 9; { чередующиеся линии}
widedofill =10; { далеко отстоящие одна от другой точки } closedotfill =11; { жирные точки}
Переменная f определяет цвет заполнения.
SetFiIlPattern (mustcr:fillpatterntype;f:word) - процедура. Устанавливает образец заполнения и цвет для одной из вызываемых процедур FillPoly, FloodFiIl, Bar, Bar3d, Pieslice. Для этого в модуле Graph имеется тип
type
fillpatterntype = аrrау[1 ..8] of byte;
При этом каждому биту этого массива соответствует один элемент изображения (пиксел). Каждый байт определяет восемь расположенных рядом точек. Восемь байтов устанавливаются один за другим. Переменная f устанавливает цвет заполнения.
FloodFill (x,y,rand:word) - процедура. Если точка (x,y) находится внутри ограниченной некоторыми линиями цвета rand поверхности, она закрашивается в соответствии с образцом, определенными процедурами SetFillStyle или SetFillPattern.
Pieslice (x,y:integer;wl,w2,r:word) - процедура.Из центра (х,у) вычерчивает дугу радиусом г от угла wl до угла w2. Угол задается в градусах. Затем такая "вырезка" заполняется согласно установленному с помощью SetFillStyle или SetFillPattern образцу.
Ellipse (x,y:integer;al,a2,rX,rY:word) - процедура. Вычерчивает эллиптическую дугу радиусами гХ, rY от угла а1 до угла а2, координаты точки (х,у) задают центр эллипса.
Графические процедуры и функции для работы с цветом и палитрой:
SetBkColor (f:word) - процедура. Переменная f устанавливает фоновый цвет.
SetCoIor (f:word) - процедура. Переменная f устанавливает текущий цвет.
Графические процедуры и функции работы с текстом:
OutText (str: string) - процедура. С позиции курсора выводится строка str. Автоматической переверстки строк не производится. Шрифт устанавливается с помощью процедур SctTextJustify, SetTextStyle, SetUserCharSize.
OutTextXY (x,y: integer; str: string) - процедура. Строка str выдается, начиная с позиции (х,у). Прочее как для OutText.
SetTextStyle (font,dir,gr:word) - процедура. Для следующего вывода текста задаются шрифтовой фонт, наклон и размер символов. Параметр Font может принимать значения 0,1,... 7 (или соответствующие обозначения констант:
defaulfont = 0, sansseriffont = 3,
triplexfont = 1, gothicfont = 4,
smallfont = 2 и др.).
Параметр Dir может принимать значения HorizDir = 0 (слева направо) или VertDir = 1 (снизу вверх, строка повернута на 90 градусов против часовой стрелки). Параметр gr может принимать значения NormSize = 1 (или 0) или 2, 3,...; в первом случае используются минимальные размеры выбранного шрифта (размеры по умолчанию).
SetUserCharSize (mx,dx,my,dy:word) - процедура. Устанавливает коэффициенты увеличения символов по осям OX, OY:
"Ширина символа новая" = "Ширина символа" * Мх / Dx,
"Высота символа новая" = "Высота символа" * My / Dy.
InstaIlUserFont (font: string) - процедура. Устанавливает шрифт символов, определенный пользователем. Все шрифты символов хранятся в файлах с расширением .CHR и по мере необходимости пользователь может устанавливать тот или иной шрифтовой фонт. В переменной font должно представлено имя файла с расширением .CHR, который необходимо использовать, например,
…
font := InstaIlUserFont ('russ.chr');
SetTextStyle (font,vertdir,2);
…
SetTextJustify (hor,vert:word) - процедура. Устанавливает параметры расположения строки относительно курсора.
Hor=0 (LeftText); Vert=0 (BottomText);
Hor=1 (CenterText ); Vert=1 (CenterText);
Hor=2 (RightText ); Vert=2 (TopText).
