Help with Elastic Collision
Show older comments
Hi! I am trying to write code to model elastic collisions. Right now the position vs time graphs are completely off (it doesn't even start at t=0). Second it appears to be an inelastic collision right now. Third, there seems to be in acurrate boundary conditions because the object on the right, the red, moves past x=10. I think that is because it is drawn not from a center of a circle but from the left most point of the 4-point "rectangle" with curvature (aka a circle). Any tips?
I have also tried plot (t, xx1) and (t, yy1) , etc within the loop but that also doesn't work.
Interestingly if you take out the line:
hold on
plot (xx1, yy1, '-r');
plot (xx2, yy2, '-b');
hold off
it has much trouble ploting anything for the Position vs Time graphs.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Modeling Elastic Collisions %%%
%%% Final Project Matlab 225 %%%
%%% K. Gifford August 2020 %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
t=0;
dt=0.5;
x1=1;
y1=0;
v1x=0;
v1y=0;
m1=1;
% centers = [x1, y1];
x2=-8;
y2=0;
v2x=2;
v2y=0;
m2=1;
% centers2 = [x2, y2];
% t=0, plot position of particles
subplot (3, 1, 1)
plot ([-10, 10], [-10, 10], 'w')
% obj1 = viscircles(centers,1)
% obj2 = viscircles (centers2, 1)
r1 = rectangle ('Position', [x1,y1,1,1], 'FaceColor', 'r', 'Curvature', [1,1]);
r2 = rectangle ('Position', [x2,y2,1,1], 'FaceColor', 'b', 'Curvature', [1,1]);
axis ([-10 10 -10 10]);
subplot (3, 1, 2)
plot (t, x1)
plot (t, x2)
xlabel ('Time')
ylabel ('Position-X')
subplot (3, 1, 3)
plot (t, y1)
plot (t, y2)
xlabel ('Time')
ylabel ('Position-Y')
xx1 = [ ];
xx2 = [ ];
yy1 = [ ];
yy2 = [ ];
% Start moving :)
while t < 100
if 1 < sqrt((x2-x1)^2+(y2-y1)^2)
x1 = x1 + (v1x * dt);
x2 = x2 + (v2x * dt);
y1 = y1 + (v1y * dt);
y2 = y2 + (v2y * dt);
xx1 = [xx1, x1];
xx2 = [xx2, x2];
yy1 = [yy1, y1];
yy2 = [yy2, y2];
else
v1x = ((m1-m2)/(m1+m2))*v1x + ((2*m2)/(m1+m2)) * v2x;
v1y = ((m1-m2)/(m1+m2))*v1y + ((2*m2)/(m1+m2)) * v2y;
v2x = ((m2-m1)/(m1+m2))*v2x + ((2*m1)/(m1+m2)) * v1x;
v2y = ((m2-m1)/(m1+m2))*v2y + ((2*m1)/(m1+m2)) * v1y;
x1 = x1 + (v1x * dt);
x2 = x2 + (v2x * dt);
y1 = y1 + (v1y * dt);
y2 = y2 + (v2y * dt);
xx1 = [xx1, x1];
xx2 = [xx2, x2];
yy1 = [yy1, y1];
yy2 = [yy2, y2];
end
% At Boundary - Turn Direction
if x1 ==10
v1x= -v1x;
end
if x2 == 10
v2x=-v2x;
end
if x1 == -10
v1x=abs(v1x);
end
if x2 == -10
v2x=abs(v2x);
end
if y1 == 10
v1y=-v1y;
end
if y2 == 10
v2y=-v2y;
end
if y1 == -10
v1y=abs(v1y);
end
if y2 == -10
v2y=abs(v2y);
end
%update the position of the rectangles
set(r1,'Position', [x1,y1,1,1]);
set(r2,'Position', [x2,y2,1,1]);
subplot (3, 1, 2)
plot (t, x1)
plot (t, x2)
xlabel ('Time')
ylabel ('Position-X')
subplot (3, 1, 3)
plot (t, y1)
plot (t, y2)
xlabel ('Time')
ylabel ('Position-Y')
hold on
plot (xx1, yy1, '-r');
plot (xx2, yy2, '-b');
hold off
drawnow
t= t+ dt;
end
%
Accepted Answer
More Answers (0)
Categories
Find more on Mathematics 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!