Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
экзамен / шпора по турбо паскалю.docx
Скачиваний:
277
Добавлен:
10.02.2014
Размер:
385.64 Кб
Скачать

18. Построение графика аналитически заданной функции

При выводе на экран графических изображений используется графическая система координат. Графические координаты задают положение каждого пиксела, отображаемого на экране. В отличие от обычной (декартовой) системы координат, графические координаты принимают только целочисленные значения. Диапазон изменения графических координат ограничен снизу нулём, а сверху разрешением экрана по горизонтали и вертикали. Максимальное значение x и y -координат можно получить, используя функции GetMaxX и GetMaxY. Графическая координата y отсчитывается сверху вниз. Геометрические декартовы координаты точки (x,y) для её изображения на экране необходимо пересчитать в графические (xg,yg) по формулам:

где xo, yo – смещение изображения на экране от левого края и сверху; yG – разрешение экрана по вертикали; dx и dy – размер собственно изображения по горизонтали и вертикали соответственно; xmin, ymin, xmax, ymax – минимальные и максимальные значения аргумента x и значения функции y в диапазоне построения графика; |a| - целая часть числа a.

Таким образом, для построения графика функции необходимо: - получить таблицу значений функции y = f(x) в диапазоне изменения x от xнач до xкон; - найти минимальные и максимальные значения аргумента x и значения функции y в диапазоне построения графика; - пересчитать действительные значения x и y в графические xg и yg; - нарисовать на экране область построения графика и оси координат; - отправить графический указатель (перо) в начало координат; - задать цвет и стиль линий; - последовательно соединить линиями (или отметить маркерами) точки графика.

При построении нескольких графиков на одном координатном поле необходимо определить максимальные и минимальные значения x и y для всех графиков.

Рассмотрим пример использования графического режима для построения графика функции y = sin x. В примере используется 3 подпрограммы-функции f, xe и уe, причём xe и уe вызываются без параметров.

Program Prg_graf;

Uses Crt, Graph; Var

Xn, xk, X, y, Ymin, Ymax, dx:real;

MX, MY,i, n: word;

Gd, Gm: integer;

Function f(xf:real):real; { расчет функции }

begin

f:=sin(xf); { Здесь приводим выражение для вычисления }

{или f:=exp(-0.5*xf*xf);} { значения Вашей функции }

end;

Function Xe:word; {расчет позиции на экране для X}

begin

Xe:=10+Round((MX-20)*(x-xn)/(xk-xn));

end;

Function Ye:word; { расчет позиции на экране для Y }

begin { на экране отсчет идет сверху-вниз }

{ на обычном графике – наоборот}

Ye:=MY-10-Round((MY-20)*(f(x)-Ymin)/(Ymax-Ymin)); end;

Begin { Начало основной программы }

xn:=-5; xk:=5; n:=250; { Исходные данные }

{или при вводе исходных данных с клавиатуры:

Write(' x начальное = '); Readln(xn);

Write(' x конечное = '); Readln(xk);

Write(' количество точек графика = '); Readln(n); }

dx:=(xk-xn)/(n-1); { интервал между точками на оси Х }

{ Нахождение минимума и максимума функции }

x:=xn; Ymin:=f(xn); Ymax:=f(xn);

for i:=2 to n do

begin

x:=x+dx; if f(x)Ymax then Ymax:=f(x); end; Gd:=Detect;

InitGraph(Gd,Gm,''); { не забудьте скопировать egavga.bgi }

{ в папку с программой Prg_graf.pas }

if GraphResult <> 0 then

begin

Writeln('Ошибка инициализации графического режима');

Halt(1);

end;

MX:=GetMaxX; MY:=GetMaxY;

Rectangle(0,0,MX,MY); { Рамка вокруг всего экрана }

Rectangle(10,10,MX-10,MY-10); { Рамка вокруг поля графика }

OutTextXY(270,2,'График функции'); { Вывод строки }

x:=0; Line(Xe,MY-10,Xe,10); { Рисуем ось ординат для x=0}

OutTextXY(Xe-10,15,'Y'); { Подписываем ось ординат }

y:=0; Line(10,MY-Ye,MX-10,MY-Ye);{ Рисуем ось абсцисс для y=0}

OutTextXY(MX-20,MY-Ye+2,'X'); { Подписываем ось абсцисс }

OutTextXY(Xe-10,MY-Ye+2,'0'); {Подписываем начало координат}

{ Рисуем сам график }

x:=xn; MoveTo(Xe, Ye); { Перемещаем перо в начало координат }

for i:=2 to n do

begin

x:=x+dx; LineTo(Xe,Ye); { Чертим линию до следующей точки}

end;

Readln;

CloseGraph;

End.