Interface

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. Затем определить область для построения графика и координаты точек кривых. Кривые для разных функций желательно рисовать разным цветом с указанием вида функции.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: