Следует учесть, что символ занимает (по умолчанию) прямоугольник размером 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 или любой другой. При очень больших и очень малых значениях аргумента или функции переходить в оцифровке осей к экспоненциальной форме представления числа.