Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Turbo Pascal / Методические указание / Графики и троектории.DOC
Скачиваний:
46
Добавлен:
15.06.2014
Размер:
225.79 Кб
Скачать

5 Практическое задание

5.1 Рассчитать разностным моделированием и затем для контроля по аналитической зависимости траекторию полета снаряда без учета сопротивления воздуха. Построить полученные траектории. Начальная скорость снаряда V0=1000 м/с, угол=450. Аналитическая зависимость имеет вид

X = V0 t cos(), Y = V0 t sin() – gt2 / 2.

5.2 Рассчитать разностным моделированием и затем для контроля по аналитической зависимости траектории полета снаряда с учетом сопротивления воздуха, пропорциональным скорости снаряда. Построить траектории полета снаряда. Начальная скорость V0=3000 м/с, угол=300, коэффициент сопротивления воздуха k=0. 01 с–1. Аналитическая зависимость имеет вид

X=V0 cos() (1– e–k t )/ k, Y=(V0 sin() +g/ k) (1– e–k t )/ k –g t/ k.

5.3 Рассчитать разностным моделированием и построить набор траекторий полета снаряда с учетом сопротивления воздуха, пропорциональным кубу скорости снаряда. Коэффициент сопротивления воздуха 10–6, уголменяется в диапазоне 10 ... 900с шагом 200.

6 Траектории движения в центральном поле

Точность получаемой методом конечных разностей траектории определяется величиной выбираемого временного шага, на котором скорости и ускорения принимаются неизменными. Для расчета больших траекторий при этом приходится оптимизировать использование массивов для хранения координат траектории ( можно и полностью отказаться от использования массивов, но с потерей универсальности используемых подпрограмм). Ниже приведен пример расчета траектории движения спутника в поле тяготения планеты.

procedure GRAF_Z( n, left,up,right,down: integer;

rz: real);

{ процедура построения траектории спутника по массиву X,Y[1..n]

декартовых координат в области экрана left,right,up,down }

var

Xg,Yg, Xg0,Yg0, k,r: integer;

kX,kY, Ymin,Ymax,Xmin,Xmax: real;

begin

{ нахождение экстремумов }

Ymin:=Y[1]; Ymax:=Y[1]; Xmin:=X[1]; Xmax:=X[1];

for k:=2 to n do begin

if Ymin>Y[k] then Ymin:=Y[k];

if Xmin>X[k] then Xmin:=X[k];

if Ymax<Y[k] then Ymax:=Y[k];

if Xmax<X[k] then Xmax:=X[k] 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;

{ построение контура небесного тела }

Xg0:=left-round( Xmin*kX);

Yg0:=down+round( Ymin*kY);

r:=round( rz*kX); { радиус планеты }

setcolor(11); setfillStyle(11,7);

FillEllipse( Xg0,Yg0,r,r);

OuttextXY(Xg0-15,Yg0-4,'планета');

setcolor(14);

{ точки графика }

for k:=1 to n do begin

Xg:=left +round( kX*(X[k] -Xmin));

Yg:=down -round( kY*(Y[k] -Ymin));

if k=1 then moveto( Xg,Yg)

else lineto( Xg,Yg) { строим график } end end;

Программа расчета траектории методом конечных разностей

с вызовом процедуры построения траектории спутника

uses Crt,Graph;

FUNCTION FA(X,l: real): real; var k,r:real;

{ составляющая ускорения (по первому параметру)

спутника в поле тяготения планеты (м/с2)}

begin k:=4.E+14; { коэффициент для Земли }

r:=sqrt(X*X+l*l); { расстояние до центра планеты }FA:=-k*X/(r*r*r) end;

FUNCTION WAY(dx,dy: real): real;

{ величины смещения по разностям координат двух положений }

begin WAY:=sqrt(dx*dx+dy*dy) end;

const N=5000;

var X,Y: array[1..N] of real; { массивы координат траектории }

Gd,Gm,i,M: integer; rz: real;

{$I graf_z.pas} { подключение файла с процедурой вывода графика}

PROCEDURE SPUTNIK( H,V,alfa: real);

{ Расчет массивов координат X,Y траектории спутника в поле тяготения планеты (Земли) с начальной скоростью V (м/с) и углом к горизонту alfa (град.). Начальное положение спутника – на высоте H от поверхности }

var vx1,vy1,ax1,ay1,vx2,vy2,ax2,ay2, dt,r, way_max: real;

begin

rz:=6.37E6; { радиус Земли (м) }

way_max:=100*rz; { ограничение длины рассчитываемой траектории }

dt:=10*way_max/V/N; { начальное приближение

для временного интервала }

X[1]:=0; Y[1]:=H+rz; { первая точка траектории }

alfa:=alfa*pi/180; { перевод угла в радианы }

REPEAT { итерации для корректировки временного интервала dt }

vx1:=V*cos( alfa); { составляющие начальной скорости }

vy1:=V*sin( alfa);

ax1:=FA(X[1],Y[1]); { составляющие ускорения в начальной точке }

ay1:=FA(Y[1],X[1]);

i:=1; r:=0; { счетчики точек и длины пройденного пути }

REPEAT inc(i); { переход к последующей точке траектории }

{ скорости } vx2:=vx1 +ax1*dt; vy2:=vy1 +ay1*dt;

{ координаты } X[i]:=X[i-1] +0.5*( vx1+vx2)*dt;

Y[i]:=Y[i-1] +0.5*( vy1+vy2)*dt;

{ ускорения } ax2:=FA( X[i],Y[i]); ay2:=FA( Y[i],X[i]);

{ уточнение } vx2:=vx1 +0.5*( ax1+ax2)*dt;

{ скорости } vy2:=vy1 +0.5*( ay1+ay2)*dt;

{ уточнение } X[i]:=X[i-1] +0.5*( vx1+vx2)*dt;

{ координат } Y[i]:=Y[i-1] +0.5*( vy1+vy2)*dt;

{ переназначение (с уточнением ускорений) для текущих величин }

ax1:=FA( X[i],Y[i]); vx1:=vx2;

ay1:=FA( Y[i],X[i]); vy1:=vy2;

r:=r+WAY( X[i]-X[i-1], Y[i]-Y[i-1]);{ пройденное расстояние }

{ Расчет траектории прерывается при прохождении заданного расстояния way_max, либо при выборе всех элементов массивов для координат (i=N),

либо при падении на планету ( расстояние до центра менее радиуса ) }

UNTIL (r>=way_max) or(i=N) or (WAY( X[i],Y[i])<=rz);

{ временной интервал dt при необходимости корректируется так, чтобы траектория была полностью отслежена при рациональном использовании

массивов для координат }

{ нужно использовать не менее 80% массивов }

if( i<0.8*N) then dt:=dt*i/N;

{ если без падения на поверхность планеты была не полностью пройдена траектория , то увеличиваем временной интервал }

if( WAY( X[i],Y[i])>rz) and (r< way_max) then dt:=dt*1.2;

UNTIL (i>=0.8*N)and

((r>=way_max)or( WAY( X[i],Y[i])<=rz));

M:=i { количество точек траектории для построения графика } end;

begin {------------ ОСНОВНАЯ ПРОГРАММА ---------------}

{ Расчет траектории при начальном положении спутника на высоте 3000 км от поверхности планеты при скорости 9 км/с под углом 300 }

SPUTNIK( 3.E6,9000,30);

Gd:=0; Initgraph(Gd,Gm,'c:\tp7\bgi');

GRAF_Z( M, 10,10,GetMaxX-10,GetmaxY-10, rz);

ReadKey; CloseGraph end.