Var right, left, down, up: integer; k_xy, kx, ky, X_max, X_min, Y_max, Y_min: double; { описание глобальных переменных }
procedure mash(c, c1, pr:word); { c - номер цвета линий}
procedure oci; { c1 - номер цвета фона }
procedure Lineto_G(x1, y1:double); { аналог графической процедуры Lineto}
IMPLEMENTATION
Uses Graph;
PROCEDURE mash;
Var xx, yy: word; xg_m, yg_m:integer;
Begin xg_M:=GetMaxX; yg_M:=GetMaxY;
{----- ввести операторы контроля заданных значений глобальных переменных ----}
{ X_min < X_max; 0 <left< right <xg_M; Y_min < Y_max; 0 <down <up <yg_M }
GetAspectRatio(xx, yy); k_xy:=xx/yy;
ky:=(down-up)/(Y_max-Y_min); kx:=(right-left)/(X_Max-X_min);
case pr of { pr - признак построения графиков }
1: begin kx:=ky/k_xy; {pr=1 - без искажения формы, меняя Right}
right:= left + Round(kx*(X_max- X_min));
if right>GetMaxX then begin right:=GetMaxX;
kx:=(right-left)/(X_Max-X_min); ky:=kx*k_xy;
up:=down - Round(ky*(Y_max - Y_min)); end; end;
2: begin ky:=kx*k_xy; {pr=2 - без искажения формы, меняя Up}
up:= down - Round(ky*(Y_max- Y_min));
if up<0 then begin up:=0;
ky:=(down-up)/(Y_max-Y_min); kx:=ky/k_xy;
right:=left+Round(kx*(X_max-X_min)); end; end;
end; {pr=0 - в заданной области}
Setcolor(c); SetFillStyle(1,c1); bar(left, up, right, down);
End;
PROCEDURE oci; { оси координат строятся только в пределах заданной области}
Var xg0, yg0:integer;
Begin XG0:=left - round(kx*X_min);
YG0:=down + round(ky*Y_min);
|
|
if X_MIN*X_MAX <=0 then line(XG0, up, XG0, down);
if Y_MIN*Y_MAX <=0 then line(LEFT, YG0, RIGHT, YG0);
End;
PROCEDURE Lineto_G; {рисование линии из текущей позиции курсора}
Var xg1, yg1:integer; {т. 1 - конец линии}
Begin
xg1:= left + Round(kx*(x1- X_min));
yg1:= down - Round(ky*(y1- Y_min)); lineto(xg1, yg1);
End;
BEGIN
END.
Приведенное описание размещения графика в прямоугольной области экрана позволяет: выводить кривые по точкам с отрицательными значениями координат, масштабировать график (сжимать/растягивать), изменять цвет фона внутри прямоугольника, задаваемого процедурой Bar(left, up, right, down).
Доработать методику для совместного построения нескольких графиков несложно. Необходимо для всех функций определить дискретные координаты y[i] и найти наибольшее и наименьшее значения для всех функций в заданных диапазонах изменения аргументов. Наибольшим значениям присвоить Y_MAX и X_MAX, а наименьшим - Y_MIN и X_MIN. Затем определить область для построения графика и координаты точек кривых. Кривые для разных функций желательно рисовать разным цветом с указанием вида функции.