Лабораторная работа. Модуль Graph
Скачать 106 Kb.
|
Лабораторная работа «Модуль Graph» В среде TurboPascal обычно работа с графикой осуществляется с помощью стандартного модуля Graph. Присоединение модуля к программе осуществляется стандартным образом: Uses Graph; Начало (инициализация) работы графического пакета осуществляется процедурой InitGrapyh, которая содержит следующие параметры GraphDriver – переменная, в которую необходимо записать код требуемого графического драйвера или нуль, если требуется автоматическое определение драйвера. Она может принимать следующие значения
GraphMode – переменная, в которую помещается код графического режима.(значение можно не указывать) DriverPath – строка, содержащая путь к драйверу (если строка пустая, считается, что драйвер находится в ткущем каталоге) Еще раз: Procedure InitGraph(var GraphDriver: integer; var GrapMode: integer; DriverPath: string); Результат выполнения процедуры InitGraph помещается в переменную GraphResult. Она может принимать следующие значения:
Завершение работы графического режима осуществляется процедурой CloseGraph, которая параметров не имеет. Для задания цвета изображения используется процедура SetColor, а для задания цвета фона – SetBkColor. Обе процедуры имеют по одному параметру – коду цвета, с возможными значениями:
Для закраски точки используется процедура 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 задает стиль линии
В последнем случае (и только) задается параметр 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. |