GUI plot for projectile motion not reproducing trajectory

17 次查看(过去 30 天)
When I try to plot my projectile motion function, the GUI plot does not display the entire trajectory as it does when I run the function in regular MATLAB. Instead it displays the projectile (dot) moving along while the y-axis constantly shifts to capture the height of the projectile. I would the entire trajectory to be displayed and also not have the y-axis shift so frantically. Below is the code in the GUI and after that, the code from the MATLAB function.
angle = app.angle.Value;
x0 = app.x0.Value;
y0 = app.y0.Value;
v0 = app.v0.Value;
g = 9.81;
hangtime = 2*v0*sind(angle)/g;
t = 0:hangtime/100:hangtime;
vix = v0*cosd(angle);
viy = v0*sind(angle);
x = x0+vix*t;
y = y0+viy*t-(g*t.^2)/2;
maxheight = y0 + (viy)^2./(2*g)
xheight = x0 + vix*(t/2);
for k=2:length(t)
x(k) = x0 +(vix*t(k));
y(k) = y0 +(viy*t(k))-0.5*g*t(k)^2;
h = plot(app.UIAxes,x(k),y(k),'.');
hold(app.UIAxes);
set(h,'MarkerSize',10);
set(h,'Color',[0.1,0.3,1]);
pause (0.02);
end
end
Now this is the original function code:
function projmotion(x0,y0,v0,theta)
% projmotion calculates projectile motion
%
% projmotion(x0,y0,v0,theta)
%
% x0 = initial x(horizontal) position
% y0 = initial y(vertical) position
% v0 = initial velocity
% theta = angle of launch
%
% Ver 1.0 by RSS
g = 9.81;
angle = theta*(pi./180);
hangtime = 2*v0*sin(angle)/g;
t = hangtime;
vix = v0*cos(angle);
viy = v0*sin(angle);
x = x0+vix*t;
y = y0+viy*t-(g*t.^2)/2;
maxheight = y0 + (viy)^2./(2*g)
xheight = x0 + vix*(t/2);
if theta >90
error('Please select angle value of 90 degrees or less')
end;
figure('Color', [1 1 1]);
for k=0:t/100:t
x = x0 +(vix*k);
y = y0 +(viy*k)-0.5*g*(k^2);
end
for k=0:t/100:t
x = x0 +(vix*k);
y = y0 +(viy*k)-0.5*g*(k^2);
h = plot(x,y,'.');
xlabel('Horizontal Distance (meters)');
ylabel('Height (meters)');
title('Trajectory Time');
set(h,'MarkerSize',10);
set(h,'Color',[1,0.3,0.5]);
hold on;
pause(0.02);
end
s1 = sprintf('Total time of travel is %f seconds.\n', t)
s2 = sprintf('Range is %f meters.\n', x-x0)
s3 = sprintf('Max height is %f meters.\n', maxheight)
s4 = sprintf('X position at max height is %f meters.\n', xheight)
message = sprintf('%s%s%s%s%s%s%s%s',s1, s3, s2, s4);
uiwait(helpdlg(message, 'Simulation Results'));
Thanks for your time out there!

采纳的回答

Walter Roberson
Walter Roberson 2019-2-2
hold(app.UIAxes);
toggles the hold state for that axes.
hold(app.UIAxes, 'on');
would turn hold on for the axes.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Animation 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by