2013-04-21 185 views
0

我想在Matlab中编写一个脚本文件,它将绘制以特定角度(a),速度(v)和从初始高度(y0)抛出的球的轨迹。我有公式,并希望Matlab绘制飞行中的球的路径。但是,我希望它只能绘制它直到碰到地面(y = 0)。无限循环在Matlab中

要做到这一点,我用了一个while循环,但它似乎永远不会满足条件,只是永远运行。我确信这个条件可以在经过多次迭代之后得到满足,但它只会持续几分钟,怎么了?

代码如下。

% Trajectory Plotter with cutoff 
    clear all 
    close all 
    clc 

    y0 = input('Enter a value for y0 in meters: '); 

    if y0 < 0 
     disp('Please enter a positive value for y0') 
    end 

    a = input('Enter a value for theta in degrees: '); 
    g = 9.81; 
    v = input('Enter a value for initial velocity in m/s: '); 

    x = 0; 
    y = y0 + x*tand(a) - (g*x.^2)/(2*(v*cosd(a))^2) 

    while y >= 0 
     x = x+0.2 
    end 

    plot(x,y); 

道歉,如果这是一个微不足道的问题,我是新来的Matlab /编程。

谢谢。

+1

在你的while循环中,你只能改变x,你需要对y做些什么。 – 2013-04-21 15:38:04

回答

0

这是真的,你确实需要更新循环控制变量y以及内while循环,但是这还不是全部这是不对劲与您的代码。

由于您要绘制轨迹,因此需要保留xy的计算值;在这里他们只是被覆盖。

以下将实现你似乎什么需要:

% Trajectory Plotter with cutoff 
clear all 
close all 
clc 

y0 = input('Enter a value for y0 in meters: '); 

if y0 < 0 
    disp('Please enter a positive value for y0') 
end 

a = input('Enter a value for theta in degrees: '); 
g = 9.81; 
v = input('Enter a value for initial velocity in m/s: '); 

x = 0; 
y = y0 + x*tand(a) - (g*x.^2)/(2*(v*cosd(a))^2); 

X = x; 
Y = y0; 

while y >= 0 
    x = x+0.2; 
    y = y0 + x*tand(a) - (g*x.^2)/(2*(v*cosd(a))^2); 

    X = [X x]; 
    Y = [Y y]; 
end 

plot(X,Y,'--o'); 

这里,覆盖xy之前,它们的值被附加到分别XY,并因此保存在这些变量。

1

确实,while循环是问题所在。如果您的条件(在这种情况下为y >= 0)不受循环执行的影响,那么条件的真值永远不会改变。这就像在墙上画画笔,并等待对面的墙上画...

现在,对于这个特定的问题,你可能想要更新y的值,在更新x的值:

while y >= 0 
    x = x+0.2; 
    y = y0 + x*tand(a) - (g*x.^2)/(2*(v*cosd(a))^2); 
end