matlab绘制抛物线轨迹

作者: 牛河 | 来源:发表于2017-12-07 11:27 被阅读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中一些代码做一点解释:

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

练习:

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

相关文章

  • matlab绘制抛物线轨迹

    前文已经学会了语法和绘图函数,今天学习一个综合练习。 预备知识:高中小球斜抛的物理知识 代码如下: 将上述代码保存...

  • Unity3D——抛物线箭头

    实现原理 平面 Cube,用于确定平面抛物线 Line,用于绘制抛物线 抛物线起点:Line 的坐标抛物线终点:屏...

  • matplotlib作图

    类MATLAB API 加载方式from pylab import * 图形绘制与matlab相似 matplot...

  • Android自定义View之使用Path绘制手势轨迹和水波效果

    先看下效果图: 绘制轨迹 绘制手指的轨迹主要是拦截View的onTouchEvent()方法,并根据手指的轨迹绘制...

  • bar

    matlab中函数bar绘制直方图中的应用函数bar(x)可以绘制直方图

  • 余生,遇见更好的自己

    生活就似一场经过,发生的,正在发生的,未发生的,每个人都在绘制自己的生命轨迹,抛物线似的起起落落。 生命是一种力量...

  • MATLAB绘制二维图像

    % % % % % 标准绘制多个线条 % % % % 资料 MATLAB之绘图基础

  • Android 绘制饼图

    抛物线大神绘制相关的文章https://hencoder.com/ui-1-1/先放效果图: 绘制思路:绘制饼图,...

  • unity 模拟抛物线

    最近在学习VR时,看见VR手柄中绘制的抛物线。感觉对抛物线很陌生,就想抽时间学习学习,自己写个抛物线充实一下。效果...

  • MATLAB|绘制云图

    绘制云图的程序

网友评论

    本文标题:matlab绘制抛物线轨迹

    本文链接:https://www.haomeiwen.com/subject/lbfdixtx.html