Условие
Промоделировать движение исследовательского зонда, «выстреленного» вертикально вверх с летящего над землейсамолета. В верхней точке траектории над зондом раскрывается парашют, и он плавно спускается на землю.
Входные параметры.
Математическая модель свободного падения тела - уравнение второго закона Ньютона с учетом двух сил, действующих на тело -силы тяжести и силы сопротивления среды. Движение является одномерным; проецируя силу, скорость и перемещение на ось, направленную вертикально вверх, получаем
Входные параметры модели:
¦ начальная высота тела;
¦ начальная скорость тела;
¦ величины, определяющие коэффициенты сопротивления среды
function FmO=fun(t,y)
tv=10;
a=100;
g=9,8
mn=10000;
mk=3000;
m=mn-a*t;
ifm>mk
else
m=mk end; mm=m; if t>=tv
p=0;
m=500; else
p=1000000;
m=mam; end;
FmO=[(p*cos(y(2))-cos(y(2))-g*sin(y(2)))/m;
((p*sin(y(2))+sin(y(2)))/m-
g*cos(y(2)))/y(l);-y(l)*cos(y(2))/10;y(l)*sin(y(2))/10];
Y0=[1000 pi/2 0 600];
[T,Y]=odel5s(@fun,[0 1000],Y0);
plot(Y(:53),Y(:,4),’g’);
hold on;
title(“zavisimost visoti ot vremeni”);
xlabel(fts’);
у1аЬеl(Ът’);
axis([0,5000,0,2000]);
Пример. Исследование динамики объектов, брошенных под углом к горизонту.
Цель занятия:
Получить практические навыки исследования объектов, динамика которых описывается дифференциальными уравнениями 2-го порядка с использованием языков программирования :Delphi, VC++, VC# и информационных технологий MatLab.
Задачи занятия:
1. Разработка алгоритмов
2. Построение семейства кривых y(x), dy/dx(x) при параметрах a-const, a-var
3. Получение зависимостей y(a), dy/da при x-const
4. Анализ результатов исследований.
Задания для проведения лабораторной работы
Динамика объекта описывается системой дифференциальных уравнений
mdvx/dt = -Fccosq; =-Fcvx/v0
mdvy/dt = -m*g - Fcsinq,=-m*g - Fcvy/v0,
где Fc =k1V+ k2*V2 - линейная и квадратичная составляющая сопротивления воздуха.
2. Динамика объекта может представляется и алгебраическими уравнениями вида
var
Form1: TForm1;
xdp,ydp:integer;
x0,y0:integer;
alfa,veloc:real;
intravel:boolean=false;
// выводит результатскорости и направления
function rtostr(t:real):string;
var e:string;
begin
str(t:4:1,e);
result:=e;
end;
//выход
procedure TForm1.Button1Click(Sender: TObject);
begin
halt;
end;
// рисует стрелку , выводит скорость и направление
procedure drawmousec;
begin
with form1.paintbox1.Canvas do begin
pen.Mode:=pmXor;
moveto(x0,y0);
Lineto(xdp,ydp);
alfa:=pi/2-arctan((ydp-y0)/(xdp-x0));
Lineto(trunc(xdp+15*cos(-pi/2-alfa+pi/10)),trunc(ydp+15*sin(-pi/2-alfa+pi/10)));
moveto(xdp,ydp);
Lineto(trunc(xdp+15*cos(-pi/2-alfa-pi/10)),trunc(ydp+15*sin(-pi/2-alfa-pi/10)));
end;
alfa:=arctan((y0-ydp)/(xdp-x0));
form1.label1.Caption:='Направление: '+rtostr(alfa/pi*180)+' ; скорость: '+rtostr(veloc/50)+' ';
veloc:=sqrt(sqr(ydp/1-y0)+sqr(xdp/1-x0));
end;
// задает камень
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
if intravel then exit;
paintbox1.Canvas.pen.color:=clwhite;
paintbox1.Canvas.brush.color:=clwhite;
drawmousec;
end;
//координаты замка
procedure TForm1.FormCreate(Sender: TObject);
begin
xdp:=shape31.Left;
ydp:=shape31.Top;
x0:=shape25.left+shape25.width div 2;
y0:=shape25.top+shape25.height div 2;
end;
var dr:boolean=false;
//передвижение мышки вниз
procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (x>x0)and(y<y0) then begin
dr:=true;
drawmousec;
ydp:=y;xdp:=x;
drawmousec;
end;
end;
//передвижение мыши (стелки)
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (dr)and(x>x0)and(y<y0) then begin
drawmousec;
ydp:=y;xdp:=x;
drawmousec;
end;
end;
// бросок
procedure TForm1.Button2Click(Sender: TObject);
const dt=0.01;
g=9.81;
var x,y,vx,vy,xo,yo:real;
bad:boolean;
r:integer;
begin
intravel:=true;
drawmousec;
vx:=veloc*cos(alfa);
vy:=veloc*sin(alfa);
x:=shape25.Left+shape25.height div 2;y:=shape25.Top+shape25.width div 2;r:=0;
repeat
xo:=x;yo:=y;
x:=x+vx*dt;y:=y-vy*dt;inc(r);
if r=10 then begin
sleep(1);
r:=0;
end;
vy:=vy-g*dt;
paintbox1.Canvas.pen.Mode:=pmCopy;
paintbox1.Canvas.pen.color:=clgreen;
paintbox1.Canvas.brush.color:=clgreen;
paintbox1.Canvas.Ellipse(trunc(xo-4),trunc(yo-4),trunc(xo+5),trunc(yo+5));
paintbox1.Canvas.pen.color:=clwhite;
paintbox1.Canvas.brush.color:=clwhite;
paintbox1.Canvas.Ellipse(trunc(x-3),trunc(y-3),trunc(x+4),trunc(y+4));
//trying to end the journey...
bad:=true;
if (y>y0/1)or(y<=0) then break;
if x>=shape15.Left then begin
if (x<=shape15.Left+shape15.width)and((y<shape17.Top+shape17.height)or
(y>shape16.Top+shape16.height)) then break;
end;
if x>=shape22.Left then begin
if (y<shape22.Top)or
(y>shape22.Top+shape22.height) then break else begin
bad:=false;
break;
end;
end;
until false;
intravel:=false;
if bad then begin
sleep(1000);
paintbox1.Repaint;
// drawmousec;
end else begin
shape32.Visible:=true;
label2.Visible:=true;
sleep(1000);
paintbox1.Repaint;
// drawmousec;
end;
end;
// изменение размеров замка
procedure TForm1.Shape32MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
shape32.Visible:=false;
label2.Visible:=false;
end;
//вывод результатов
procedure TForm1.Label2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
shape32.Visible:=false;
label2.Visible:=false;
end;
// изменение координат замка
procedure TForm1.Splitter1CanResize(Sender: TObject; var NewSize: Integer;
var Accept: Boolean);
begin
accept:=false;
if newsize>=50 then begin
accept:=true;
end;
end;
// изменение координат замка
procedure TForm1.Splitter1Moved(Sender: TObject);
begin
halt;
end;
var s1d:boolean=false;
var s2d:boolean=false;
var s3d:boolean=false;
var s4d:boolean=false;
var s5d:boolean=false;
procedure TForm1.PaintBox2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
s1d:=true;
end;
// изменение координатов замка мышью
procedure TForm1.PaintBox2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (s1d)and(shape15.Left+x>=50)and(shape15.Left+shape15.Width+x+50<=shape21.left) then begin
paintbox2.left:=paintbox2.left+x;
paintbox3.left:=paintbox3.left+x;
paintbox4.left:=paintbox4.left+x;
shape15.Left:=shape15.Left+x;
shape16.Left:=shape16.Left+x;
shape17.Left:=shape17.Left+x;
shape18.Left:=shape18.Left+x;
shape19.Left:=shape19.Left+x;
shape20.Left:=shape20.Left+x;
shape23.Left:=shape23.Left+x;
shape23.Width:=form1.width;
end;
end;
//передвижение мыши для изменения координат замка вверх
procedure TForm1.PaintBox2MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
s1d:=false;
end;
//передвижение мыши для изменения координат замка вниз
procedure TForm1.PaintBox3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
s2d:=true;
end;
// изменение координатов замка мыщью
procedure TForm1.PaintBox3MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (s2d)and(shape15.Width+x>=10)and(shape15.Left+shape15.Width+x+50<=shape21.left) then begin
shape15.Width:=shape15.Width+x;
shape16.Width:=shape16.Width+x;
paintbox3.left:=paintbox3.left+x;
shape17.width:=shape15.width+20;
shape17.left:=shape15.left-10;
paintbox4.width:=shape15.width+20;
paintbox4.left:=shape15.left-10;
shape18.width:=shape17.width div 5;
shape19.width:=shape17.width div 5;
shape18.left:=shape17.left;
shape19.left:=shape17.left+shape17.width div 5*2;
shape20.left:=shape17.left+shape17.width div 5*4;
shape20.width:=shape17.left+shape17.width-shape20.left;
end;
end;
//передвижение мыши для изменения координат замка вверх
procedure TForm1.PaintBox3MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
s2d:=false;
end;
//передвижение мыши для изменения координат замка вниз
procedure TForm1.PaintBox4MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
s3d:=true;
end;
//передвижение мыши для изменения координат замка вверх
procedure TForm1.PaintBox4MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
s3d:=false;
end;
//передвижение мыши для изменения координат
procedure TForm1.PaintBox4MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (s3d)and(shape17.top+y>=100)and(shape16.Top+shape16.Height+y+20<=shape23.Top) then begin
shape17.top:=shape17.top+y;
shape18.top:=shape18.top+y;
shape19.top:=shape19.top+y;
shape16.top:=shape16.top+y;
shape20.top:=shape20.top+y;
shape15.top:=shape15.top+y;
paintbox4.top:=paintbox4.top+y;
paintbox3.top:=paintbox3.top+y;
paintbox2.top:=paintbox2.top+y;
shape15.height:=form1.height-shape15.top;
paintbox2.height:=form1.height-paintbox2.top;
paintbox3.height:=form1.height-paintbox3.top;
end;
end;
//передвижение мыши для изменения координат замка вниз
procedure TForm1.PaintBox5MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
s4d:=true;
end;
//передвижение мыши для изменения координат замка вверх
procedure TForm1.PaintBox5MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
s4d:=false;
end;
//передвижение мыши для изменения координат замка
procedure TForm1.PaintBox5MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (s4d)and(shape22.top+y-10>=shape21.top)and(shape22.Top+shape22.Height+y+10<=shape23.Top) then begin
shape22.top:=shape22.top+y;
paintbox5.top:=paintbox5.top+y;
paintbox6.top:=paintbox6.top+y;
end;
end;
//передвижение мыши для изменения координат замка вниз
procedure TForm1.PaintBox6MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
s5d:=true;
end;
//передвижение мыши для изменения координат замка вверх
procedure TForm1.PaintBox6MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
s5d:=false;
end;
procedure TForm1.PaintBox6MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (s5d)and(shape22.height+y>=25)and(shape22.Top+shape22.Height+y+10<=shape23.Top) then begin
shape22.height:=shape22.height+y;
paintbox6.top:=paintbox6.top+y;
end;
end;
procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
dr:=false;
end;
end.
Дата добавления: 2015-09-07; просмотров: 751;