GUI plot for projectile motion not reproducing trajectory

9 views (last 30 days)
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!

Accepted Answer

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

More Answers (0)

Categories

Find more on Animation in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!