Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Лабораторная работа «Модуль Graph»
В среде TurboPascal обычно работа с графикой осуществляется с помощью стандартного модуля Graph.
Присоединение модуля к программе осуществляется стандартным образом: Uses Graph;
Начало (инициализация) работы графического пакета осуществляется процедурой InitGrapyh, которая содержит следующие параметры
GraphDriver переменная, в которую необходимо записать код требуемого графического
драйвера или нуль, если требуется автоматическое определение драйвера.
Она может принимать следующие значения
Имя |
Значение |
Назначение |
Detect |
0 |
Автоматический выбор драйвера |
CGA |
1 |
|
MCGA |
2 |
|
EGA |
3 |
|
EGAMono |
4 |
|
IBM8514 |
5 |
|
HercMoho |
6 |
|
ATT400 |
7 |
|
VGA |
8 |
|
PC3270 |
9 |
|
CurrentDriver |
-128 |
Текущий драйвер |
GraphMode переменная, в которую помещается код графического режима.(значение
можно не указывать)
DriverPath строка, содержащая путь к драйверу (если строка пустая, считается, что драйвер находится в ткущем каталоге)
Еще раз:
Procedure InitGraph(var GraphDriver: integer; var GrapMode: integer; DriverPath: string);
Результат выполнения процедуры InitGraph помещается в переменную GraphResult. Она может принимать следующие значения:
Имя |
Значение |
Назначение |
GrOk |
0 |
инициализация прошла нормально: можно работать. |
GrNoInitGraph |
-1 |
Не установлен графический режим |
grNotDetected |
-2 |
нет графического адаптера |
grFileNotFound |
-3 |
нет драйвера устройства: |
grInvalidDriver |
-4 |
ошибка в драйвере |
grNotLoadMem |
-5 |
нет памяти для загрузки драйвера |
grNoScanMem |
-6 |
Нет памяти для сканирования |
grNoFloodMem |
-7 |
нет памяти для закраски |
grFontNotFound |
-8 |
Не найден файл со шрифтом |
GrNoFontMem |
-9 |
нет памяти для загрузки |
GrInvalidMode |
-10 |
недопустимый режим для выбранного драйвера |
GrError |
-11 |
Ошибка графической системы |
grIOerror |
-12 |
Ошибка ввода-вывода графической системы |
GrInvalidFont |
-13 |
Ошибка в файле со шрифтом |
grInvalidFontNum |
-14 |
Неверный номер шрифта |
Завершение работы графического режима осуществляется процедурой CloseGraph, которая параметров не имеет.
Для задания цвета изображения используется процедура SetColor, а для задания цвета фона SetBkColor. Обе процедуры имеют по одному параметру коду цвета, с возможными значениями:
Имя |
Значение |
Назначение |
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 |
Белый |
Для закраски точки используется процедура PutPixel(X,Y:Integer;Pixel:Word), где Х и Y координаты точки, а Pixel цвет, в который закрашивается точка.
Для построения отрезка используются процедуры Line, LineRel и LineTo.
Процедура Line имеет параметрами координаты концов отрезка X0, Y0, X1, Y1.
Процедура LineRel проводит отрезок от текущей позиции в точку, сдвинутую относительно текущей позиции на величины Dx и Dy, которые являются параметрами процедуры
Процедура LineTo проводит отрезок от текущей позиции в точку с координатами Х, Y, которые являются параметрами процедуры.
Для перемещения указателя без высвечивания точки используются процедуры MoveRel и MoveTo.
Первая перемещает указатель координат на заданное расстояние (Dx, Dy).
Вторая - в заданную точку (Х, Y)
Текущие параметры линии () задаются с помощью процедуры SetLineStyle( LineStyle: Word; Pattern: Word; Thickness: Word);
LineStyle задает стиль линии
SolidLn |
0 |
Сплошная |
DottedLn |
1 |
Пунктирная |
CenterLn |
2 |
Штрихпунктирная |
DashedLn |
3 |
Штриховая |
UserBitLn |
4 |
Заданная пользователем |
В последнем случае (и только) задается параметр Pattern.
Thickness задает толщину линии 1 нормальная, 3 толстая.
Для построения фигур из линий используются процедуры
Bar (X1,Y1,X2,Y2: integer) построение закрашенного прямоугольника
Bar3D (X1,Y1,X2,Y2: integer; Dept:Word; Top:boolean) построение закрашенного параллелепипеда
DrawPoly (NumPoints: Word; Var PolyPoints); построение многоугольника
FillPoly(NumPoints: Word; Var PolyPoints) построение закрашенного многоугольника
FloodFill(X,Y: integer; Border:Word)
Rectangle (X1,Y1,X2,Y2: integer) построение контура прямоугольника
X1,Y1,X2,Y2 координаты левого верхнего и правого нижнего углов прямоугольника (передней грани параллелепипеда)
Dept ширина боковой грани по горизонтали.
Top признак вычерчивания верхней грани.
NumPoints:- количество точек многоугольника
PolyPoints массив содержащий пары координат вершин многоугольника. Их число NumPoints+1. Первая и последняя пары должны совпадать.
X,Y координаты любой точки внутри области
Borde цвет линии, до которой производится закраска.
Для построения криволинейных фигур используются процедуры
Arc(X,Y: integer; StAngle,EndAngle,Radius:Word) построение дуги окружности
Circle (X,Y: integer; Radius:Word) построение окружности
Ellipse (X,Y: integer; StAngle,EndAngl,:Word; Xradius,Yradius:Word) построение дуги эллипса
FillEllips (X,Y: integer; Xradius,Yradius:Word) построение закрашенного эллипса
PieSlice (X,Y: integer; StAngle,EndAngle,Radius:Word) построение закрашенного сектора круга.
Sector (X,Y: integer; StAngle,EndAngl,:Word; Xradius,Yradius:Word) построение закрашенного сектора эллипса
X,Y координаты центра
StAngle,EndAngle угол до начальной (конечной) дуги, отсчитываемый против часовой стрелки от горизонтальной оси, направленной слева направо
Xradius,Yradius горизонтальные и вертикальные полуоси эллипса.
Для работы с текстом используются следующие процедуры
OutText (TextString:string) вывод последовательности символов
OutTextXY (X,Y: integer; TextString:string) вывод последовательности символов, начиная с заданных координат.
SetTextJustify (Horiz,Vert:Word) устанавливает способ выравнивания текста
Horiz 0 левое выравнивание
1 Выравнивание по центру
2 правое выравнивание
Vert 0 - Нижнее выравнивание
2 Верхнее выравнивание
SetTextStyle (Font:Word: Direction:Word; CharSize:word) устанавливает текущие тип шрифта, направление текста и размер символов
Font 0 Default Font
1 - TriplexFont
2 - SmallFont
3 - SansSerifFont
4 - GoticFont
Direction 0 горизонтальное расположение строк
1 вертикальное расположение строк
CharSize 0 размер шрифта задается пользователем
SetUserCharSize(MultX, DivX, MultY, DivY:Word) задает коэффициенты увеличения штриховых шрифтов.
MultX./ DivX коэффициент увеличения ширины символов
MultY/ DivY коэффициент увеличения высоты символов
С помощью процедуры ClearDevice осуществляется очистка графического экрана
С помощью процедур SetActivePage (Page:Word) и SetVisualPage (Page:Word) можно использовать несколько экранных страниц: сначала готовить изображение (SetActivePage), а потом отображать страницу (SetVisualPage)
Page номер экранной страницы.
Функции GetMaxX, GetMaxY возвращают максимальную координату для текущего драйвера в текущем режиме.
А Функции GetX, GetY возвращают соответствующую текущую координату.
В качестве примера использования ресурсов модуля Graph рассмотрим программу, которая изображает график функции exp(-Ax)*sin(x) при изменении коэффициента А.
Program Exampl;
Uses Graph;
Const ExpBeg = 0.1;
DeltaExp = 0.1;
Var X0, Y0: Word;
X,Y: real;
i, j :word;
GraphDriver, GraphMode: integer;
Switch: Boolean;
Begin
GraphDriver:=Detect;
InitGraph(GraphDriver, GrapMode, );
If GraphResult<>grOk then
Writeln(Ошибка при включении графического режима)
Else
Begin
X0:=20;
Y0:=GetMaxY div 2;
Swith := True;
For j:= 0 to 10 do
Begin
SetActivePage(Org(Switch));
SetBkColorBlue);
SetColor(White);
ClearDevice;
Line (X0, 20, X0, GetMaxY 20);
Line (X0, Y0, GetMaxX 20,Y0);
MoveTo(X0,Y0);
For i:=1 to GetMaxX 40 do
Begin
X:=i * 4 * Pi / (GetMaxX 40);
Y := Exp (-X * (ExpBeg + DeltaExp * j)) * Sin(X);
LineTo(X0+i, Y0 round (Y * 150));
End;
SetVisualPage(ord(Switch));
Swith := not Switch;
End;
CloseGraph;
End;
Readln;
End/
Задание. Разобрать приведенный пример.
Строя небольшие программы разобрать возможности всех приведенных процедур и функций.
Примечание. В работе перечислены не все процедуры и функции модуля, а также почти не указывались типы и переменные.
Отчетность. Зачет по работе будет проводиться на одном из последующих занятий с помощью билетов, содержащих задание на программирование с использованием модуля GRAPH.