Она позволяет рисовать на экране дисплея любую ломаную, заданную набором координат некоторого множества точек. Это может быть как сложная геометрическая фигура, так и табличная математическая функция. Параметр NumPoints - это количество точек ломаной (заметим, что если необходимо нарисовать замкнутый многоугольник с N вершинами, то значение NumPoints должно быть на единицу больше числа N, а координата (N+1) –й точки должна быть такой же, как координата первой). Под бестиповым параметром PolyPoints понимается какая-либо переменная, состоящая из наборов двухкомпонентных записей. Поля каждой записи должны содержать координаты X-и Y очередной точки. В модуле Graph введен такой тип:
TYPE
PointType = RECORD
X , Y : Integer ; {координаты точки}
END ;
Обычно набор точек организуется как массив из записей типа PointType (и именно к такой структуре приводится значений параметра PolyPoint при работе процедуры DrawPoly). Пример построения графика функции с помощью процедуры DrawPoly приведен далее.
USES Graph; | {подключен модуль Graph } |
{$I initgraf.pas} | {процедура инициализации} |
CONST | |
Pi * 3.14151828; | {константа Pi (замещает функцию)} |
Pi2 = 2 * Pi; | {различные производные от Pi...} |
Pi001 = 0.01* Pi; | |
VAR | |
angle: Real; | |
sine_func: Array [1.201] of PointType ; | { массив точек} |
maxy, i: Integer; | |
BEGIN | |
Grlnit; | {инициализация графики} |
maxy := GetMaxY div 2; | {середина экрана по оси Y} |
angle := 0.0; | {задание стартовых значений} |
i := 0; | { счетчик точек в sine_func} |
repeat | { цикл заполнения sine_func } |
Inc ( i ); | |
sine_func[i].x:= Round (100 * angle) + 10; | |
sine_func[i].y:= Round (100 * Sin (angle)) + maxy; | |
angle := angle + Pi001; | |
until angle > Pi2; | |
DrawPoly (i, sine_func) ; | { рисование графика синуса} |
ReadLn; | {пауза до нажатия ввода} |
CloseGraph | {закрытие графики} |
END. |
С помощью DrawPoly можно вывести график части функции. Для этого достаточно указать при передаваемом массиве номер n первого рассматриваемого элемента (т.е. точки), а в первом параметре — количество рассматриваемых точек, начиная с n-й, например
DrawPoly (20, sine _ func [100]);
Такой вызов выведет ломаную линию по точкам с номерами 100, 101,..., 119.
При выводе количества точек, соизмеримого со значением GetMaxX, и при несплошном стиле линии может оказаться, что шаг между соседними точками соответствует ширине пробела между пунктиром. В итоге линия может вообще не проявиться на экране. Надо либо уменьшить число точек, либо избрать сплошной тип линии.
Управление цветами и шаблонами заливки (заполнения)
Рассмотрим процедуры, управляющие цветовой гаммой изображения на дисплее, что не только определяет степень разборчивости и привлекательности изображения, но и в конечном итоге может влиять на физиологическое состояние пользователя.
Задание типа заливки
В модуле Graph предусмотрены процедуры, с помощью которых можно заполнить (залить) определенным «узором» любую замкнутую область изображения. Вид «узора» задается так называемым шаблоном заливки. В Турбо Паскале предопределен ряд стандартных шаблонов, но кроме того, имеется возможность конструировать собственные.
Назначение шаблона заполнения (заливки) производится процедурой
SetFillStyle (Pattern: Word; Color: Word)
где параметр Pattern определяет вид шаблона заливки, a Color — его цвет. Все разрешенные значения параметра Pattern предопределены в модуле Graph в виде констант:
CONST
EmptyFill | =0 | { сплошная заливка цветом фона} |
SolidFill | =1 | { сплошная заливка текущим цветом} |
LineFill | =2 | { заливка типа ===} |
LtSlashFill | =3 | { заливка типа ///} |
SlashFill | =4 | { заливка жирными линиями типа ///} |
BkSlashFill | =5 | { заливка жирными линиями типа \\\} |
LtBkSlashFill | =6 | { заливка типа \\\} |
HatchFill | =7 | { заливка редкой штриховкой} |
XHatchFill | =8 | { заливка частой штриховкой} |
InterleaveFill | =9 | { заливка прерывистой линией} |
WideDotFill | =10 | { заливка редкими точками} |
CloseDotFill | =11 | { заливка частыми точками} |
UserFill | =12 | { заливка, определенная программистом} |
Константа UserFill используется для определения типа заливки, который предварительно был задан в программе. Для задания своего нового шаблона необходимо воспользоваться процедурой
Дата: 2019-05-29, просмотров: 225.