Chuyển động ném xiên

Phát triển từ code chương trình "Rơi tự do" ta mở rộng bài toán thành chuyển động hai chiều của vật trong trường trọng lực đều.

Xét một vật bị ném từ độ cao 20 m, tức vị trí ban đầu: x=0,y=20, với vận tốc đầu 30 m/s chếch 60 độ theo phương ngang. Trạng thái ban đầu ấy được cho như sau:

1
2
3
4
5
6
7
8
9
%% INPUT DATA
x = 0;
y = 20;

v = 30;
alpha = 60;

t = 0;
dt = 0.01;

Phạm vi quan sát ta cài đặt ở tầm xa 100 m và độ cao 70 m:

1
2
3
4
5
6
7
8
%% FIGURE
figure('name','Nem xien','color','white','numbertitle','off');
hold on
fig_quanang = plot(x,y,'ro','MarkerSize',10,'markerfacecolor','r');
ht = title(sprintf('t = %0.2f s',t));

axis equal
axis([-1 100 -1 70]);

Vòng lặp tính toán gia tốc, vận tốc và toạ độ theo phương pháp chuỗi Taylor:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
%% CALCULATION
alpha = alpha/180*pi;
vx = v*cos(alpha);
vy = v*sin(alpha);

while y>-0.01
t = t+dt;
ax = 0;
ay = -g;
vx = vx+ax*dt;
vy = vy+ay*dt;
x = x+vx*dt+0.5*ax*dt.^2;
y = y+vy*dt+0.5*ay*dt.^2;

plot(x,y,'o','markersize',0.5,'color','k');
set(fig_quanang,'xdata',x,'ydata',y);
set(ht,'string',sprintf('t = %0.2f s',t));
pause(0.002);
end
  • Video minh hoạ

  • Code chương trình

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
function chuyen_dong_nem_xien
clc
close all
clear all

%% CONSTANTS
g = 9.81;

%% INPUT DATA
x = 0;
y = 20;

v = 30;
alpha = 60;

t = 0;
dt = 0.01;

%% FIGURE
figure('name','Nem xien','color','white','numbertitle','off');
hold on
fig_quanang = plot(x,y,'ro','MarkerSize',10,'markerfacecolor','r');
ht = title(sprintf('t = %0.2f s',t));

axis equal
axis([-1 100 -1 70]);

%% CALCULATION
alpha = alpha/180*pi;
vx = v*cos(alpha);
vy = v*sin(alpha);

while y>-0.01
t = t+dt;
ax = 0;
ay = -g;
vx = vx+ax*dt;
vy = vy+ay*dt;
x = x+vx*dt+0.5*ax*dt.^2;
y = y+vy*dt+0.5*ay*dt.^2;

plot(x,y,'o','markersize',0.5,'color','k');
set(fig_quanang,'xdata',x,'ydata',y);
set(ht,'string',sprintf('t = %0.2f s',t));
pause(0.002);
end
end