1. ЦЕЛЬ И ЗАДАЧИ РАБОТЫ
Целью работы является изучение основ работы с графическими процедурами и функциями языка Turbo Pascal.
2. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Модуль Graph представляет собой библиотеку из более чем 50 графических процедур и функций. В модуле поддерживаются несколько типов линий и стилей заполнения, существует несколько типов шрифтов, которые можно увеличивать, выравнивать и ориентировать вертикально или горизонтально. Для того чтобы выполнить программу, которая использует модуль Graph, необходимо иметь доступ к одному или более графических драйверов (файлы с расширением BGI), файлам TURBO.TPL, GRAPH.TPU и к файлам шрифтов с расширением CHR. Каждый драйвер содержит код и данные, хранящиеся в отдельном файле.
Во время выполнения, процедура InitGraph определяет графическое устройство, загружает и инициализирует соответствующий графический драйвер, переводит систему в графический режим и возвращает управление вызывающей программе.
Процедура Close Graph выгружает драйвер из памяти и восстанавливает предыдущий видеорежим.
Рассмотрим используемую в графическом режиме координатную систему.
Верхний левый угол графического экрана определен как (0,0). Значение Х или колонки увеличиваются направо. Значение Y или строки увеличиваются вниз. Так в режиме 640x480 на адаптере CGA экранные координаты каждого из четырех углов и точка в центре экрана будут представлены:
Для вывода графической информации в заданную позицию в Turbo Pascal
используется текущий указатель (CP - Current Pointer). CP подобен курсору в
текстовом режиме, но в отличие от курсора CP не виден. Следующие процедуры
перемещают CP: InitGraph, MoveTo, MoveRel, LineTo, LineRel, OutText,
SetGraphMode, GraphDefaults, ClearDevice, SetViewPort, ClearViewPort.
Причем последние 5 команд перемещают CP в позицию (0,0).
Графический модуль Turbo Pascal позволяет использовать большое число
процедур для рисования различных геометрических фигур: точек, линий,
окружностей, дуг, эллипсов, прямоугольников, многоугольников и т.д. Все
графические процедуры и функции с кратким описанием приведены ниже.
Процедуры модуля Graph | |
Arc | Рисует дугу от начального угла к конечному, используя (X,Y) как центр |
Bar | Рисует полосу, используя текущий стиль и цвет. |
Bar3D | Рисует 3-х мерную полосу, используя текущий стиль и цвет. |
Circle | Рисует окружность, используя (X,Y) как центр. |
ClearDevice | Очищает экран и устанавливает текущий указатель (CP) в начало. |
ClearViewPort | Очищает окно. |
CloseGraph | Закрывает графическую систему. |
DetectGraph | Проверяет аппаратуру и определяет какой графический драйвер и в каком режиме используется. |
DrawPoly | Рисует многоугольник текущим цветом и типом линии. |
Ellipse | Рисует эллиптическую дугу от начального угла к конечному, используя (X,Y) как центр. |
FillEllipse | Рисует заполненный эллипс, используя (X,Y) как центр и XRadius и YRadius как горизонтальные и вертикальные оси. |
FillPoly | Заполняет многоугольник, используя сканирование. |
FloodFill | Заполняет ограниченную область, используя текущий шаблон и цвет заполнения. |
GetArcCoords | Позволяет запросить координаты команды Arc. |
GetAspectRatio | Возвращает разрешение экрана из которого может быть вычислен относительный аспект (Xasp/Yasp). |
GetFillPattern | Возвращает шаблон заполнения, установленный последним вызовом SetFillPattern. |
GetFillSettings | Позволяет запросить текущий шаблон и цвет, установленные SetFillStyle или SetFillPattern. |
GetImage | Сохраняет битовый образ указанной части экрана в буфере. |
GetLineSettings | Возвращает текущие стиль, шаблон и толщину линии, установленные SetLineStyle. |
GetModeRange | Возвращает минимальный и максимальный графические режимы для данного драйвера. |
GetPalette | Возвращает текущую палитру и ее размер. |
GetTextSettings | Возвращает текущий шрифт, направление, размер и выравнивание текста, установленные SetTextStyle и SetTextJustify. |
GetViewSettings | Позволяет запросить текущие параметры окна и отсечения. |
GraphDefaults | Устанавливает текущий указатель (CP) в начало и переустанавливает графическую систему. |
InitGraph | Инициализирует графическую систему и устанавливает устройство в графический режим. |
Line | Рисует линию от (X1,Y1) к (X2,Y2). |
LineRel | Рисует линию от текущего указателя (CP) к точке, лежащей на заданном растоянии. |
LineTo | Рисует линию от текущего указателя к (X,Y). |
MoveRel | Передвигает текущий указатель (CP) на заданное расстояние от его текущей позиции. |
MoveTo | Передвигает текущий указатель (CP) в (X,Y). |
OutText | Выводит текст на экран от текущего указателя. |
OutTextXY | Выводит текст на экран. |
PieSlice | Рисует и заполняет сектор, используя (X,Y) как центр и рисуя от начального угла к конечному. |
PutImage | Выводит битовый образ на экран. |
PutPixel | Рисует точку (пиксел) в (X,Y). |
Rectangle | Рисует прямоугольник, используя текущий цвет и тип линии. |
RestoreCRTMode | Восстанавливает видеорежим, который был до инициализации графики. |
Sector | Рисует и заполняет сектор эллипса. |
SetActivePage | Устанавливает активную страницу для графического вывода. |
SetAllPalette | Изменяет цвет палитры. |
SetAspectRatio | Изменяет значение относительного аспекта. |
SetBkColor | Устанавливает цвет фона. |
SetColor | Устанавливает основной цвет, которым будет осуществляться рисование. |
SetFillPattern | Выбирает шаблон заполнения, определенный пользователем. |
SetFillStyle | Устанавливает шаблон заполнения и цвет. |
SetGraphBufSize | Позволяет изменить размер буфера для функций заполнения. |
SetGraphMode | Переводит систему в графический режим и очищает экран. |
SetLineStyle | Устанавливает текущие толщину и стиль линии. |
SetPalette | Изменяет один цвет палитры, указанный через ColorNum и Color. |
SetRGBPallete | Позволяет модифицизовать палитру для IBM 8514 и VGA. |
SetTextJustify | Устанавливает выравнивание текста, используемое OutText и OutTextXY. |
SetTextStyle | Устанавливает текущий шрифт, стиль и размер текста. |
SetUserCharSize | Позволяет изменить ширину и высоту символа для штрихового шрифта. |
SetViewPort | Устанавливает текущее окно для графического вывода. |
SetVisualPage | Устанавливает номер видимой графической страницы. |
SetWriteMode | Устанавливает режим вывода (копирование или XOR) для линий, рисуемых с DrawPoly, Line, LineRel, LineTo, Rectangle. |
Функции модуля Graph. | |
GetBkColor | Возвращает текущий фоновый цвет. |
GetColor | Возвращает текущий цвет. |
GetDefaultPalette | Возвращает аппаратную палитру в записи PaletteType. |
GetDriverName | Вoзвращает строку с именем текущего драйвера. |
GetGraphMode | Возвращает текущий графический режим. |
SetMaxColor | Возвращает максимальный цвет, который можно задать в SetColor. |
GetMaxMode | Возвращает номер максимального режима текущего загруженного драйвера. |
GetMaxX | Возврашает максимальный Х (разрешение по горизонтали) для текущего графического драйвера и режима. |
GetMaxY | Возвращает максимальный Y (разрешение по вертикали) для текущего графического драйвера и режима. |
GetModeName | Возвращает строку с именем указанного графического режима. |
GetPaletteSize | Возвращает размер таблицы палитры. |
GetPixel | Возвращает цвет точки в (X,Y). |
GetX | Возвращает координату X текущей позиции (CP). |
GetY | Возвращает координату Y текущей позиции (СР). |
GraphErrorMsg | Возвращает строку сообщения об ошибке для заданного кода ErrorCode. |
GraphResult | Возвращает код ошибки для последней графической операции. |
ImageSize | Возвращает число байт, требуемое для заполнения прямоугольной области экрана. |
InstallUserDriver | Устанавливает пользовательский драйвер устройства в BGI таблицу драйверов устройств. |
InstallUserFont | Устанавливает новый шрифт, который не встроен в BGI систему. |
RegisterBGIdriver | Регистрирует драйвер BGI для графической системы. |
RegisterBGIfont | Регистрирует шрифт BGI для графической системы. |
TextHeight | Возвращает высоту строки в пикселах. |
TextWidth | Возвращает ширину строки в пикселах. |
Рассмотрим пример программы:
program GraphText;
uses
Graph;
var
GraphDriver,
GraphMode,
ErrorCode: Integer;
begin
{Автоматическое определение драйвера}
GraphDriver:=Detect;
{Последний параметр InitGraph указывает путь к драйверам}
InitGraph(GraphDriver, GraphMode, 'C:\DRIVERS');
ErrorCode:=GraphResult;
if ErrorCode <> grOK then {ошибка }
begin
Writeln('Graphics error: ', GraphErrorMsg(ErrorCode));
Writeln('Program aborted...');
Halt(1);
end;
Rectangle(0, 0, GetMaxX, GetMaxY); {рисовать прямоугольник на весь экран}
OutTextXY(GetMaxX div 2, GetMaxY div 2,
'Borland Graphics interface (BGI)');
Readln;
CloseGraph;
end. {GraphTest}
Программа начинается с вызова InitGraph, который автоматически определяет тип адаптера и загружает соответствующий графический драйвер. ВНИМАНИЕ: на разных компьютерах этот путь различается, поэтому в программе пишите СВОЙ путь. Если графическое устройство не распознано или во время инициализации произошла ошибка, выдается сообщение об ошибке и программа завершается. Иначе, чертится прямоугольник по краю экрана и в центре экрана выводится текст.
3.ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Ознакомиться с теоретическими сведениями данной работы.
2. Ответить на контрольные вопросы.
3. Выполнить свой вариант задания.
4.ОФОРМЛЕНИЕ ОТЧЕТА
Отчет о работе должен содержать номер, название и цель работы, ответы на контрольные вопросы, текст программы и результат выполнения программы.
5.КОНТРОЛЬНЫЕ ВОПРОСЫ
1) Что такое текущий указатель?
2) Какой вид имеет система координат в графическом режиме?
3) Следует ли указывать в директиве USES модуль GRAPH?
4) Какие действия производят процедуры InitGraph и CloseGraph?
5) Написать программу, которая в центре красного экрана пользователя рисует окружность, залитую желтым цветом.
6. ВАРИАНТЫЗАДАНИЙ
№ задания | ||||||||||
№ по журналу | ||||||||||
С помощью процедур и функций модуля GRAPH на экране изобразить декартовую систему координат (по осям расставить цифровые значения) и построить графики:
1) x=3t (1+t3), y=3t2 (1+t3) при -1<t 5;
2) x=t2/(1+t2), y=t3/(1+t2) при -10 t
10;
3) x=(t2-1)/(1+t2), y=t(t2-1)/(1+t2) при -10 t
10;
4) x=cos2 t+cost, y=cost sint+sint при 0 t<2
;
5) x=cost (1+cost), y=sint (1+cost) при 0 t<2
;
6) x=t-sint, y=1-cost при 0 t<2
;
7) x=sint, y=t2-cost при 0 t<2
;
8) x=t2*sint, y=t2-cost при -
t.
;
9) x=sint, y=cost при -
t
;
10) x=cos2t, y=sin2t при 0 t
2
.