
- •Содержание
- •1 Цель работы
- •3 Методика построения набора графиков
- •4 Практическое задание
- •1 Цель работы
- •2 Построение графика функции, заданной в параметрической форме
- •3 Практическое задание
- •1 Цель работы
- •2 Метод конечных разностей при расчете траекторий движения
- •3 Алгоритм расчета траектории движения точки
- •4 Программа построения траекторий полета снаряда
- •5 Практическое задание
- •6 Траектории движения в центральном поле
- •7 Практическое задание
- •1 Цель работы
- •2 Интерполяция дискретных данных полиномом
- •3 Аппроксимация методом наименьших квадратов
- •4 Алгоритм аппроксимации мнк
- •5 Практическое задание
3 Методика построения набора графиков
Доработать методику для совместного построения нескольких графиков несложно. Необходимо для всех функций определить дискретные координаты X,Yи найти наибольшее и наименьшее значения для всех функций в заданных диапазонах изменения аргументов. Затем определить область для построения графика и наборы координат точек кривых. Кривые для разных функций желательно рисовать разным цветом с указанием вида функции.
Пример файла (g_mn.pas), содержащего процедуру вывода не более четырех графиков:
type arr=array[1..4,1..200] of real; { массивы координат }
ari=array[1..4,1..200] of integer; { для графиков }
{ процедура построения набора m графиков по массивам
X,Y[1..m, 1..n]декартовых координат ( поnточкам )
в области экрана left,right,up,downбез искажения форм кривых }
procedure G_MN( X,Y: arr;
m,n, left,up,right,down: integer);
var
Xg,Yg: ari; Xg0,Yg0, i,k : integer;
kX,kY, Ymin,Ymax,Xmin,Xmax: real;
{ при нахождении экстремумов вначале присваиваем им любые значения из рассматриваемых }
begin Xmin:=X[1,1]; Xmax:=X[1,1];
Ymin:=Y[1,1]; Ymax:=Y[1,1];
for k:=1 to m do { перебор графиков }
for i:=2 to n do begin
if Ymin>Y[k,i] then Ymin:=Y[k,i];
if Ymax<Y[k,i] then Ymax:=Y[k,i];
if Xmin>X[k,i] then Xmin:=X[k,i];
if Xmax<X[k,i] then Xmax:=X[k,i] end;
{ коэффициенты масштабирования по горизонтали и вертикали }
kX:=(right-left)/(Xmax-Xmin);
kY:=( down- up )/(Ymax-Ymin);
{ пересчет коэффициентов масштабирования правой или нижней
границы области вывода для получения неискаженной формы кривых }
if kX<kY then begin kY:=kX;
down:= up +round( (Ymax-Ymin)*kY) end
else begin kX:=kY;
right:=left+round( (Xmax-Xmin)*kX) end;
for k:=1 to m do { точки графиков в системе координат экрана }
for i:=1 to n do begin
Xg[k,i]:=left +round(kX*(X[k,i] -Xmin));
Yg[k,i]:=down -round(kY*(Y[k,i] -Ymin)) end;
setcolor( 7);
Rectangle(left,up,right,down); { выделение области графика }
setcolor(14);
{ выводим ось ординат, если она расположена в области графика }
if Xmin*Xmax<=0 then begin
Xg0:=left-round(Xmin*kX);
line( Xg0,up, Xg0,down);
OuttextXY( Xg0+3,up+5,'ось Y') end;
{ выводим ось абсцисс, если она расположена в области графика }
if Ymin*Ymax<=0 then begin
Yg0:=down+round(Ymin*kY);
line( left,Yg0, right,Yg0);
OuttextXY( right-40,Yg0+6,'ось X') end;
for k:=1 to m do begin
setcolor(8+k); { перебор графиков и назначение цветов }
moveto( Xg[k,1],Yg[k,1]); { вывод очередного графика }
for i:=2 to n do lineto( Xg[k,i],Yg[k,i]) end end;
Пример программы построения графиков двух функций в одной
области экрана:
uses Crt,Graph;
{$I g_mn.pas} { подключение файла с подпрограммой
вывода набора графиков }
{ определение функций, графики которых будут строиться }
function F1(x: real): real; begin F1:=ln(1+x) end;
function F2(x: real): real;
begin F2:=x-x*x/2+x*x*x/3-x*x*x*x/4 end;
var x,y: arr; { тип-массив определен в файлеg_mn.pas}
n,i, Gd,Gm: integer; a,b,dx: real;
begin n:=200; { число точек каждого графика }
a:=-0.8; b:=2; { диапазон изменения параметра }
dx:=(b-a)/(n-1); { шаг изменения параметра }
{ расчет массивов координат для функций }
for i:=1 to n do begin
x[1,i]:=a+(i-1)*dx; y[1,i]:=F1( x[1,i]);
x[2,i]:=x[1,i]; y[2,i]:=F2( x[2,i]) end;
Gd:=0; Initgraph(Gd,Gm,'c:\tp7\bgi');
{ вызов подпрограммы построения набора графиков }
G_MN( x,y, 2,n, 10,10,GetmaxX,GetmaxY);
ReadKey; CloseGraph end.