Произвольную кривую можно вывести как, используя процедуру вывода отрезков прямых линий Line, так и процедуру вывода многоугольниковDrawPoly.
Перед началом вывода функциональной зависимости необходимо определить размеры графика.
Во-первых, начало координат следует отодвинуть от левой границы экрана для размещения шкалы размерности по оси ординат.
Во-вторых, необходимо сделать отступ от правой границы экрана для указания размерности оси абсцисс.
В-третьих, следует определить размер графика по высоте так, чтобы он имел отступы от верхней и нижней границ экрана, был бы достаточно крупным и, в то же время, удобным для обозрения.
В-четвёртых, надо определить количество выводимых точек графика.
Пример. Программа вывода синусоидальной функции с использованием процедуры вывода отрезков прямых линийLine.
Program sinus1;
uses Crt, Graph;
const
N = 500; (* Количество точек графика *)
var
d, m, e, Xmax, Ymax, Xfirst, Xend, Y0, Ym: integer ;
Line (Xfirst, Y0, Xend, Y0); (* Проведение оси Х *)
Line (Xfirst, Y0 – Ym, Xfirst, Y0 + Ym); (* Проведение оси Y *)
(* Блок вычисления и рисования синусоидальной функции.
Вычисление и запоминание координат точек в массивах X и Y,
вывод функции отрезками прямых линий *)
SetLineStyle (0, 0, 3); SetColor (red);
X [0] := Xfirst; Y [0] := Y0;
for k := 1 to N do
Begin
X [k] := Xfirst + trunc (k*hх);
Y [k] := Y0 – trunc (mY*SY*sin (k*hfi);
Line (X [k-1], Y [k-1], X [k], Y [k] );
Delay (100);
end;
readln;
CloseGraph (* Процедура закрытия графического режима *)
end.
Принятые обозначения:
Xfront, Xback – отступы в относительных единицах от левой (передней) и правой (задней) границ экрана соответственно,
Dy – относительный размер графика по оси ординат,
Y0 – координата положения оси Y на экране,
hx – шаг по оси абсцисс,
hfi – шаг по аргументу (по углу, радиан),
Nt – количество периодов синусоиды,
Em – амплитуда синусоиды.
ПроцедураDrawPoly ( N: word; var Points) модуля Graph рисует текущим цветом и типом линии произвольную ломаную линию, заданную N вершинами (точками излома) с графическими координатами Points. Координаты точек излома задают парой значений типа word, первое из которых определяет горизонтальную, второе – вертикальную координаты. Points – переменная типа record. Если крайние точки совпадают, то будет вычерчен многоугольник. Поэтому полный синтаксис процедуры DrawPoly будет иметь вид, например,
type
Points = record
X, Y : word
end;
var
A: array [1..50] of Points;
N: word;
. . . . . . .
С помощью процедурыDrawPoly удобно выводить на экран не только многоугольники или ломаные линии, но и графики функций, заданных формулами. Рассмотрим, например, вывод на экран графика синусоидальной функции.
Пример. Программа вывода синусоидальной функции с использованием процедуры вывода многоугольниковDrawPoly.
Program sinus2;
uses Crt, Graph;
const
N = 500; (* Количество точек графика *)
type
Points = record
X, Y : word
end;
var
d, m, er, Xmax, Ymax, Xf, Xe, Y0, Ym: integer ;
k: word ;
Xfr, Xb, hx, hfi, Nt, Em, Dy, SY, mY: real;
coords : array [0..N] ofPoints;
begin
ClrScr;
Em := 3; Nt := 2; (* Выбор амплитуды и числа периодов синусоиды *)
Xfr := 0.15; Xb := 0.2; (* Выбор отступов графика по оси Х *)
Dy := 0.35; (* Выбор высоты графика в относительных единицах*)
d := detect; m := VGAMed;
InitGraph (d, m, ' ');
(* Получение номера ошибки, если инициализация режима не произошла *)