Phát triển từ chương trình “Rơi tự do” viết bằng ngôn ngữ Matlab, 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, hay còn gọi chuyển động ném xiên.

Trên trang Vật lý kỹ thuật cũng đã có chương trình chuyên nghiệp dành riêng cho mô phỏng chuyển động ném xiên. Có thể tìm hiểu và tải chương trình tại đây.

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