matlab有趣的程序和命令Matlab程序员

matlab绘制抛物线轨迹

2017-12-07  本文已影响52人  牛河

前文已经学会了语法和绘图函数,今天学习一个综合练习。

预备知识:高中小球斜抛的物理知识

代码如下:

%Purpose:
%This program calculates the distance traveled by a ball throw at a
%specified angle "theta" and a spedified velocity "vo" from a
%point,ignoring air friction.It calculates the angle yielding maximum
%range,and also plots selected trajectories.
%
%Define variable:
%conv           Degrees to adians conv factor
%grav           The gravity acceleration
%ii,jj          Loop index
%index          The maximum range in array
%maxangle       The angle that gives the maximum range
%maxrange       Maximum range
%time           Time
%theta          Initial angle
%fly_time       The total trajectory time
%vo             The initial velocity
%vxo            x-component of the initial velocity
%vyo            y-component of the initial velocity
%x              x position of ball
%y              y position of ball
%定义常数数值
conv=pi/180;
grav=-9.82;
vo=input('Enter the initial velocity:');
range=zeros(1,91);
%计算最大水平距离
for ii = 1:91
    theta = ii -1;
    vxo = vo * cos(theta * conv);
    vyo = vo * sin(theta * conv);
    max_time = -2 * vyo/grav;
    range(ii) = vxo * max_time;
end
%显示计算水平距离的列表
fprintf('Angle versus Range\n');
for ii = 1:5:91
    theta = ii-1;
    fprintf('%2d\t\t%8.4f\n',theta,range(ii));
end
%计算最大的角度和水平距离
[maxrange,index]=max(range);
maxangle = index -1;
fprintf('\n Max range is %8.4f at %2d degrees.\n',maxrange,maxangle);
%绘制轨迹图形
for ii = 5:10:80
    theta =ii;
    vxo = vo*cos(theta*conv);
    vyo = vo*sin(theta*conv);
    max_time = -2 * vyo/grav;
    %计算小球轨迹的x、y坐标数值
    x=zeros(1,21);
    y=zeros(1,21);
    for jj=1:21
        time = (jj-1) * max_time/20;
        x(jj) = vxo * time;
        y(jj) = vyo * time + 0.5 * grav * time^2;
    end
    plot(x,y,'g');
    if ii == 5
        hold on;
    end
end
%添加图形的标题和坐标轴名称
title('\bf Trajectory of Ball vs Initial Angle \it\theta');
xlabel('\bf\itx\rm\bf(meters)');
ylabel('\bf\ity\rm\bf(meters)');
axis([0,max(range)+5,0,-vo^2/2/grav]);
grid on;
%绘制最大水平的轨迹图形
vxo = vo * cos(maxangle * conv);
vyo = vo * sin(maxangle * conv);
max_time = -2 * vyo/grav;
%计算(x,y)点
x = zeros(1,21);
y = zeros(1,21);
for jj = 1:21
    time = (jj -1)*max_time/20;
    x(jj) = vxo * time;
    y(jj) =vyo * time + 0.5 * grav * time ^ 2;
end
plot(x,y,'r','Linewidth',2);
hold off;

将上述代码保存为ball.m,在matlab的命令窗口,输入ball后回车。输入不同的初始速度。运行情况如下:

>> ball
Enter the initial velocity:45
Angle versus Range
 0        0.0000
 5       35.8083
10       70.5286
15      103.1059
20      132.5504
25      157.9674
30      178.5847
35      193.7757
40      203.0790
45      206.2118
50      203.0790
55      193.7757
60      178.5847
65      157.9674
70      132.5504
75      103.1059
80       70.5286
85       35.8083
90        0.0000

 Max range is 206.2118 at 45 degrees.

抛物线如下:


Vo为45m/s的抛物线.png

下面对ball.m中一些代码做一点解释:

练习:

1.对每个角度的抛物线用不同的颜色绘制,并用图例(legend函数)标注
2.绘制同样抛射角,不同初速度的图像

上一篇下一篇

猜你喜欢

热点阅读