Borrar filtros
Borrar filtros

Unsure how to correct behaviour in MATLAB code.

2 visualizaciones (últimos 30 días)
Jack Zimmerman
Jack Zimmerman el 11 de Feb. de 2017
Comentada: Jack Zimmerman el 12 de Feb. de 2017
clear all;
close all;
clc;
count = 1;
%Declaring the balls initial conditions
R_Ball = 2;
initpos.x = 0;
initpos.y = 2.4;
initvel.x = 2;
initvel.y = 4;
gravity.x = 0;
gravity.y = 9.81;
restitution = 0.7;
GroundBall_friction = 0.2;
%Animation timestep
dt = 0.01;
%Executing the animation
pos.x = initpos.x; % initial position
pos.y = initpos.y; % initial position
vel.x = initvel.x; % initial velocity-x
vel.y = initvel.y; % initial velocity-y
t_arc = linspace(0,(2*vel.y)/gravity.y,4000);
for k = 1:4000
%Updating the ball's position
vel.x = vel.x;
vel.y = vel.y - gravity.y*t_arc(k)
pos.x = pos.x + vel.x*t_arc(k);
pos.y = pos.y + vel.y*t_arc(k) - (1/2)*gravity.y*(t_arc(k).^2);
if vel.y < 0 && pos.y < 0
vel.y = (restitution)*vel.y;
vel.y = -vel.y;
vel.x = vel.x + GroundBall_friction*(restitution - 1)*vel.x;
end
if vel.x < 0.
break;
end
clf;
%Drawing the frame
subplot(2,1,1)
hold on
line([0 30],[0 0]);
rectangle('position', [pos.x pos.y R_Ball R_Ball],'Curvature',[1 1],'FaceColor','r');
posxx(count) = pos.x;
posyy(count) = pos.y;
plot(posxx + 1/2*R_Ball, posyy + 1/2*R_Ball,'b');
axis([0 30 0 10]);
hold off
subplot(2,1,2)
hold on
velyy(count) = vel.y;
velxx(count) = vel.x;
plot(posxx,velxx);
plot(posxx,velyy);
count = count+1;
hold off
axis([0 30 -10 10]);
%Refresh rate
pause(dt)
end
How can I maintain my ball rolling on the X-axis and not pass through the Y-axis.

Respuesta aceptada

Image Analyst
Image Analyst el 11 de Feb. de 2017
Add this to the end of the loop, just before the final "end"
if pos.y < 0
break;
end
  7 comentarios
Walter Roberson
Walter Roberson el 12 de Feb. de 2017
pos.y = max(0, pos.y)
does the same thing without needing an "if"; and it can be vectorized.
Jack Zimmerman
Jack Zimmerman el 12 de Feb. de 2017
Exactly what I needed Thank you.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre External Language Interfaces en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by