matlab绘制抛物线轨迹

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

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

代码如下:

%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中一些代码做一点解释:

  • zeros(1,91) 生成1*91的零矩阵
  • xlabel('\bf\itx\rm\bf(meters)')
  • hold off 方便下次调用ball.m时擦除前面的figure

练习:

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,553评论 9 467
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,242评论 25 708
  • 《苦才是人生》索达吉堪布著 面对同样半杯水 悲观者伤心于杯子一半是空的 而乐观者会满足于杯子一半是满的 在姐姐的书...
    EIC喵姐阅读 6,141评论 0 1
  • 2017,全新的数字,全新的一年。脑海中咕噜咕噜,又开始了许多新计划的设计。焦今天跟我说了一句话“你不要被理想架空...
    Joy慢慢阅读 254评论 0 1