我正在尝试在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 /编程的新手。
感谢。
答案 0 :(得分: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
答案 1 :(得分:0)
确实你确实需要在while循环中更新循环控制变量y
,但这并不是你的代码所有的错误。
由于您正在寻找绘制轨迹,因此您需要保留x
和y
计算的值;在这里,他们只是被覆盖了。
以下内容将实现您的需求:
% 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
之前,它们的值会分别附加到X
和Y
,因此会保留在这些变量中。