Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[37]

тывать искажение формы графика,регулируемое параметрами процедуры

GetAspectRatio(xx, yy). Для вывода графика без искажения формы кривой следует переназначить координаты области экрана так, чтобы получить Ky=K*Kx, где K=xx/yy. Операторы для автоматического масштабирования приведены ниже в модуле GR F для различных случаев, определяемых значением параметра "pr".

1: pr = 1. Пусть заданы нижняя, верхняя и левая границы области построения графика: down, up, left. Необходимо найти значение right при условиях: Ky = K * Kx и right<=GetMaxX. Если условие ограничения графика по длине экрана не выполняется, то полагается right:=GetMaxX; и значение "up" корректируется (уменьшается).

2: pr = 2. Пусть заданы левая, правая и нижняя границы области построения графика: left, right, down. Необходимо найти значение up при условиях: Kx = Ky / K и up>=0. Если условие ограничения графика по высоте экрана не выполняется, то полагается up:=0; и значение "right" корректируется (уменьшается).

4). Строим оси координат (начало координат x = 0, y = 0 ).

5). Строим график процедур BGI:

виде последовательных отрезков используя аналоги графических

for i:=2 to N do

moveto G(x[1], y[1]); lineto G(x[i], y[i]);

Ниже приводятся операторы модуля GR F, наращивая который аналогами графических процедур BGI можно строить графики в расчетной области.

Unit GR F; {$N+}

{ модуль GR F } { подключение сопроцессора}

INTERFACE

Var right, left, down, up: integer;

Y max, Y min: double;

procedure mash( c, c1, pr:word); procedure oci;

procedure Lineto G(x1, y1:double); { аналог графической процедуры Lineto}

k xy, kx, ky, X max, X min, { описание глобальных переменных

{ c - номер цвета линий} { c1 - номер цвета фона }

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;

BeginXG0:=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 - конец линии}

xg1:= left + Round(kx*(x1- X min));

yg1:= down - Round(ky*(y1- Y min));lineto(xg1, yg1);

Приведенное описание размещения графика в прямоугольной области экрана позволяет: выводить кривые по точкам с отрицательными значениями координат, масштабировать график (сжимать/растягивать), изменять цвет фона внутри прямоугольника, задаваемого процедурой Bar(left, up, right, down).

Доработать методику для совместного построения нескольких графиков несложно. Необходимо для всех функций определить дискретные координаты y[i] и найти наибольшее и наименьшее значения для всех функций в заданных диапазонах изменения аргументов. Наибольшим значениям присвоить Y MAX и X MAX, а наименьшим - Y MIN и X MIN. Затем определить область для построения графика и координаты точек кривых. Кривые для разных функций желательно рисовать разным цветом с указанием вида функции.

Практическое задание N 2. 2

1.Построить графики функций Y1(x) и Y2(x) в двух областях экрана.

2.Построить графики Y1(x) и Y2(x) в одной области экрана.

Примечание: использовать библиотеку GR F для построения графиков с автоматическим масштабированием, сохраняющим естественную форму кривой.

Необходимо также вывести надпись вида функции и диапазона изменения "х". Вид функций Y1(x) и Y2(x) приведен в таблице:

Функция Yi(x)

Диапазон изменения "х"

Функция Y2(x)

-5 ...5

Sin(x2)


5 6 7 8

Sin(x) + x Cos(x) *x Cos(x2-4*x-1)

(x2-1)/(x4+1) x*(x-3)*(x+1) x2*(x-2)*(x+1) Exp(x) + Exp(-x)

x2*Sin(1/x)

x*Sin2(1/x)

Sqrt(x2+2)*Sin(x)

-15 -15 -1 -10 -2 -3 -3 -1 -3 0.1

0.1 0.01 -10 -1

...15 ...15 ..10 ..10 .. 2

.. 3 .. 1 .. 3 .. 3

...0.1 .. 5

...0.1 ..10 ... 1

Sin(x) + x2/10

Sin(x)*x

Sin(x2-4*x-1)

-x5+2*x3-1 x*(x-3)*(x-1) x2*(x+2)*(x+1) Exp(x)+Exp(-2*x)

x3*Sin(1/x2)

(x+1)*Sin2(1/x)

(x+1)*Sin(x)

Практическое задание N 2. 3

1. Построить графики функций Y(x) и Yi(x) в одной области экрана с автоматическим масштабированием по осям координат.

Примечание: График функции Yi(x) строится для трех и четырех членов разложения функции Y) в бесконечный ряд Тейлора. Например, для функции Y(x)=exp(x) нужно построить графики Y(x) = exp(x), Y3(x) = 1+x+x2/2!, Y4(x) = 1+x+x2/2+x3/3!. Показатель степени функции Y(x) = (1+x)m "m" - вещественное число. Необходимо вывести надпись вида функции и диапазона изменения "х". Вид функций Y(x) и Yi(x) приведен в таблице:

Функция Y(x)

Разложение в ряд Тейлора Yi(x)

Интервал "x"

1 2 3 4

Ln(1+x)

Arctan(x)

1 + x + x2/2! + x3/3! +

x - x3/3! + x5/5! - x7/7! + .. 1 - x2/2! + x4/4! - x6/6! + .. 1+m*x+m*(m-1)*x2/2!+m*(m-1)*(m-2)*x3/3!+ x - x2/2 + x3/3 - x4/4 + .. x - x3/3 + x5/5 - x7/7 + ..

-3 . . . 2 -3 . . . 3 -3 . . . 3

-0, 9 . . 0, 9 -0, 95 . . 3 -1 . . . 1

Построение графика функции Y = FY(t), X = FX(t).

Движение одной точки вокруг другой (полюса) удобно описывать в виде зависимости расстояния "r" между точками от угла "fi" между неподвижной линией (горизонталью) и линией, соединяющей точку с полюсом: r = F(fi). Такая система координат называется полярной. Проекции точки на оси декартовой системы координат находятся по формулам: x= r*cos(fi), y= r*sin(fi).

Таким образом получаем неявное задание функции Y от X. Здесь параметром является угол fi. Сформулируем задачу в общем виде.



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53]