2013-04-21 107 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