Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Турбо Паскаль.doc
Скачиваний:
60
Добавлен:
23.09.2019
Размер:
939.52 Кб
Скачать

Лабораторная работа №13 Построение графика функции

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

Геометрические декартовы координаты точки (x,y) для её изображения на экране необходимо пересчитать в графические (xg,yg) по формулам:

;

,

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

Таким образом, для построения графика функции необходимо:

  • получить таблицу значений функции = 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)<Ymin then Ymin:=f(x);

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.