Следует учесть, что символ занимает (по умолчанию) прямоугольник размером 8х8 пикселей

Методика построения графика функции

График изображается в виде ломаной линии, соединяющей точки, лежащие на графике (производится кусочно-линейная аппроксимация кривой графика). Такая аппроксимация дает хороший результат при достаточно малом шаге.

Этап 1: вычислить массивы значений аргумента и соответствующих значений функции. Шаг изменения аргумента зависит от выбранного диапазона изменений аргумента и количества точек, и вычисляется по формуле:

h=(Xmax-Xmin)/(k-1),

Где К – количество точек графика. Параллельно с созданием массивов нужно определить минимальное и максимальное значения функции, что необходимо для проведения масштабирования.

Этап 2: определить координаты точек графика, выраженные в экранных координатах с учетом размеров выбранного поля вывода графика (Xn,Yn; Xk,Yk), т.е. нужно провести масштабирование. Масштабирование по каждой из координатных осей производится в соответствии с общей формулой:

M = diapNum/diapVal,

где diapNum = maxK-minK - диапазон номеров позиций экрана, т.е. разность максимальной и минимальной координат поля вывода;

diapVal = maxF-minF - диапазон значений величины, откладываемой по оси абсцисс (ординат), т.е. разность максимального и минимального значений аргумента (функции).

Тогда: номер позиции по оси Х точки графика определяется из выражения :

coordX[i] = round( (X[i] - Xmin)*diapG/diapX))+Xn,

где coordX[i] - номер позиции в строке для i-ой точки;

X[i] - значение аргумента в i-ой точке;

Xmin - минимальное значение аргумента;

diapG = Xk-Xn – диапазон позиций вдоль оси Х поля вывода;

diapX = Xmax-Xmin - диапазон значений аргумента;

номер позиции по оси Y точки графика определяется из выражения :

coordY[i] = round( (Ymax - Y[i])*diapV/diapY))+Yn,

где coordY[i] - номер позиции в столбце для i-ой точки;

Y[i] - значение функции в i-ой точке;

Ymax - максимальное значение функции;

diapV = Yk-Yn – диапазон позиций вдоль оси Y поля вывода;

diapY = Ymax - Ymin - диапазон значений функции.

Этап 3: рисование графика. На основе полученных координат (coordX, coordY) точек кривой графика осуществить соединение этих точек отрезками прямых.

Этап 4: нанесение координатной сетки. Если ndx - количество интервалов, на которое разбивается поле вывода по оси абсцисс, а ndy – по оси ординат, то разность значений аргумента (функции), соответствующая этому интервалу определяется формулами:

dx = (Xmax - Xmin) / ndx

dy = (Ymax - Ymin) / ndy.

Те же значения, выраженные в экранных координатах:

lx = round((Xk - Xn)/ndx)

ly = round((Yk - Yn)/ndy).

С учетом вычисленных значений нарисовать линии координатной сетки.

Этап 5: нанесение соответствующих числовых значений аргумента и функции (оцифровка осей). Для вывода надписей нужно перейти от действительной формы представления значений аргумента и функции к их строковому представлению. Для этого можно использовать стандартную процедуру

Str(value:n:m; Var s:string).

Следует учесть, что символ занимает (по умолчанию) прямоугольник размером 8х8 пикселей.

Тогда, если под запись числа отводится n позиций, m из которых под дробную часть, то начальная позиция вывода значений функции определяется из выражения:

Xn – n*8 – 15.

Начальная позиция вывода значений аргумента определяется выражением:

Xn + lx*(i-1) – (n-m)*8 + 4.

Задание №3 – на 4 лабораторной работы.

Нарисовать в одном поле вывода графики двух функций (выбирать из предложенного списка с помощью компонента RadioGroup, List или любого другого) от одного аргумента. Рисование осуществить в двух режимах: в одном масштабе (общая для обоих графиков ордината, общая оцифровка) и в разных масштабах (независимые ординаты для графиков, две независимых оцифровки).

В любом из режимов обеспечить просмотр графиков влево и вправо от заданного диапазона аргумента с некоторым шагом его изменения. При этом должна изменяться оцифровка обеих осей. Для прокрутки графиков использовать компонент ScrollBar или любой другой. При очень больших и очень малых значениях аргумента или функции переходить в оцифровке осей к экспоненциальной форме представления числа.