Она позволяет рисовать на экране дисплея любую ломаную, заданную набором координат некоторого множества точек. Это может быть как сложная геометрическая фигура, так и табличная математическая функция. Параметр 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, просмотров: 292.