0

我正在尝试在 Matlab 中编写一个脚本文件,该文件将绘制以特定角度 (a)、速度 (v) 和初始高度 (y0) 抛出的球的轨迹。我有方程式,并希望 Matlab 绘制飞行中球的路径。但是,我希望它只绘制它直到它落地(y = 0)。

为此,我使用了一个 while 循环,但它似乎永远不会满足条件并且永远运行。我确信在 x 的多次迭代后可以满足条件,但它只会持续几分钟,有什么问题?

代码如下。

    % 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/编程的新手。

谢谢。

4

2 回答 2

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  
于 2013-04-21T15:38:20.577 回答
0

确实,您确实需要在ywhile 循环中更新循环控制变量,但这并不是您的代码有问题的全部。

由于您要绘制轨迹,因此您需要保留 和 的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');

在这里,在覆盖x和之前y,它们的值分别附加到XY,因此保留在这些变量中。

于 2013-04-21T15:57:56.423 回答