Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПО_ЛР_27_28.docx
Скачиваний:
9
Добавлен:
27.09.2019
Размер:
88.75 Кб
Скачать

Лабораторная работа № 27-28 Работа с графикой в Pascal

Цель работы: овладение практическими приемами и навыками разработки программ по работе в графическом режиме. Закрепление основных функций и процедур, применяемых в этом режиме. Уяснить различия между текстовым и графическим режимами

ВНИМАНИЕ! Перед выполнением работы ознакомиться с теоретическим материалом в ПРИЛОЖЕНИИ.

Содержание отчета: название работы, краткие теоретические сведения о модуле Graph. Сведения о процедурах вывода геометрических фигур и вывода текста. Полный текст варианта вашего задания. Программа на языке Паскаль

Теоретическая часть

1.1.Вывод точек и линий

Для высвечивания точки используется процедура PutPixel(x,y:integer; Pixel:word);

x,y - координаты высвечиваемой точки;

Pixel - цвет высвечиваемой точки.

В Турбо-Паскале существует три процедуры построения отрезка прямой.

Процедура LineTo(x,y:integer); рисует отрезок прямой из текущей точки в заданную.

x,y - координаты заданной точки.

Процедура LineRel(Dx,Dy:integer); рисует отрезок прямой из текущей точки в точку, отстоящую на расстояние (Dx,Dy) от текущей.

Dx,Dy - задаваемые расстояния (вдоль оси X и оси Y соответственно) от текущей точки до заданной.

Процедура Line(x1,y1,x2,y2:integer); рисует отрезок прямой, соединяющий точку (x1,y1) с точкой (x2,y2).

x1,y1 - координаты первой точки;

x2,y2 - координаты второй точки.

Образец линии устанавливается процедурой

SetLineStyle(LineStyle:word;Pattern:word;Thickness:word);

Параметр LineStyle задает тип линии. Он может принимать одно из следующих значений, задаваемых константами:

SolidLn=0 - сплошная;

DottedLn=1 - точечная;

CenterLn=2 - штрих пунктирная;

DashedLn=3 - пунктирная;

UserBitLn=4 - тип линии определяется пользователем.

Параметр Pattern определяет тип линии, задаваемый пользователем. Этот параметр игнорируется, если LineStyle не равен UserBitLn. При задании типа линии пользователем используется 16 -битовый шаблон, определяемый параметром Pattern:

биты с нулевыми значениями не вызывают изменения отображения в данной точке, а биты со значениями 1 отображают точку.

Параметр Tickness определяет толщину линии, он может принимать два значения NormWidth=1 и TickWidth=3. В первом случае рисование производится линиями обычной толщины, во втором случае - утолщенными (в 3 раза).

При инициализации графического режима по умолчанию устанавливается сплошной тип линии обычной толщины.

Процедура DrawPoly(NumPoints:word; var PolyPoints); выводит ломаную линию в соответствии с текущим цветом и текущим образцом линии.

NumPoints - число вершин ломаной;

PolyPoints - массив координат ломаной, элементами массива являются записи типа PointType.

type PointType=record

x,y:integer; {координаты вершин ломаной}

end;

Число элементов массива должно быть не меньше NumPoints. Ломаную можно построить также, последовательно рисуя отрезки - звенья ломаной.

1.2.Вывод многоугольников

Процедура Rectangle(x1,y1,x2,y2:integer); рисует прямоугольник, концы диагонали которого имеют координаты (x1,y1) и (x2,y2) соответственно. Рисование производится текущим цветом и в соответствии с текущим образцом линий.

Процедура Bar(x1,y1,x2,y2:integer); штрихует прямоугольник (не очерчивая его границы) в соответствии с текущим образцом и цветом штриховки.

x1,y1 - координаты одного конца диагонали прямоугольника;

x2,y2 - координаты другого конца диагонали прямоугольника.

Нарисовать закрашенный прямоугольник можно и по-другому: сначала нарисовать прямоугольник процедурой Rectangle, а затем закрасить его с помощью процедуры FloodFill.

Процедура FloodFill(x,y:integer;Border:word); закрашивает ограниченную область, внутри которой находится точка с координатами (x,y). Закраска производится в соответствии с текущим цветом и образцом.

Если заданная точка находится внутри области, то область закрашивается; если точка находится вне области, то закрашивается внешняя часть области. Параметр Border задает цвет границы области. Точки внутри области закраски, цвет которых отличается от цвета, заданного в параметре Border, закрашиваются.

Произвольный многоугольник выводится процедурой

FillPoly (NumPoints:word;var PolyPoints);

NumPoints - число вершин многоугольника;

PolyPoints - массив координат вершин многоугольника, элементами массива являются записи типа PointType; число элементов массива должно быть не менее NumPoints.

Закраска осуществляется текущим цветом и в соответствии с текущим образцом.

Цвет и образец закраски устанавливается процедурой

SetFillStyle(Pattern:word; Color:word);

Pattern - параметр, устанавливающий образец закраски;

Color - параметр, устанавливающий цвет закраски.

Виды закраски определяется константами.

Например: SolidFill=1 - сплошная заливка;

HatchFill=7 - редкой штриховкой;

Возможные цвета и соответствующие им константы выбираются из справочной таблицы. По умолчанию выбирается закраска, заполняющая всю область сплошным цветом, а в качестве цвета - максимальный цвет, содержащийся в заданной палитре. Если параметр Pattern имеет значение UserFill, то образец закраски должен быть предварительно установлен процедурой SetFillPattern.

Процедура SetFillPattern(Pattern:FillPatternType; Color:word);

устанавливает образец и цвет закраски.

Параметр Pattern задает битовый шаблон образца закраски. Тип FillPatternType определен следующим образом:

type FillPatternType=array[1..8] of byte;

Образец закраски формируется в соответствии с байтовыми значениями, содержащимися в массиве Pattern. Массив шаблона состоит из 8-ми элементов - 8-ми байтов, причем каждый байт соответствует 8-ми точкам строки экрана. Таким образом, создается образец закраски для прямоугольника размером 8*8 точек, который при закраске повторяется. Если бит в байте шаблона равен 1, то соответствующая точка растра будет высвечена на экране. Образцы, определяемые пользователем, позволяют создавать закраски, отличающиеся от предварительно определенных.

Пример формирования шаблона для образца закраски:

Двоичное значение Шестнадцатеричное значение

11001100 = $CC (1-ый байт)

00110011 = $33 (2-ой байт)

11001100 = $CC (3-ий байт)

00110011 = $33 (4-ый байт)

00110011 = $33 (5-ый байт)

11001100 = $CC (6-ой байт)

00110011 = $33 (7-ой байт)

11001100 = $CC (8-ой байт)

Параметр Color определяет цвет закраски.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]