Message Boards Message Boards

Create an animate of an elastic collision with Manipulate?

Posted 4 years ago

I am trying to animate an elastic collision and I don't how to code to describe the motion after the impact. Here's where I'm at right now:

S1i[t_, V1i_] := 0.2 + t*V1i;
S2i[t_, V2i_] := 0.8 + t*V2i;
S1f[t_, V1f_] := t*V1f;
S2f[t_, V2f_] := t*V2f;
V1f[m1_, m2_, V1i_, V2i_] := 2 (m1*V1i + m2*V2i)/(m1*m2) - V1i;
V2f[m1_, m2_, V1i_, V2i_] := 2 (m1*V1i + m2*V2i)/(m1*m2) - V2i;
ts := (0.6 - r1 - r2)/(V1ie - V2ie);
y = 0.4;
r1 = 0.06;
r2 = 0.06;
V1ie = 0.2;
V2ie = -0.1;
m1e = 0.03;
m2e = 0.03;
V1fe = 2 (m1e*V1ie + m2e*V2ie)/(m1e*m2e) - V1ie;
V2fe = 2 (m1e*V1ie + m2e*V2ie)/(m1e*m2e) - V2ie;
xy[t_] := {S1i[t, V1ie], y};
zy[t_] := {S2i[t, V2ie], y};
py[t_] := {S1f[t, V1fe], y};
qy[t_] := {S2f[t, V2fe], y};
traj1 = Table[xy, {t, 0, ts, 0.1}];
traj2 = Table[zy, {t, 0, ts, 0.1}];
traj3 = Table[py, {t, ts, 15, 0.1}];
traj4 = Table[qy, {t, ts, 15, 0.1}];
Manipulate[
 Show[ListPlot[traj1], ListPlot[traj2], ListPlot[traj3], 
  ListPlot[traj4],
  Graphics[{
    Black, Circle[xy[t], r1], Red, Circle[zy[t], r2]}],
  AspectRatio -> Automatic], {t, 0, 10}]

where S1f and S2f describe the motion after the impact of the Black Circle and the Red Circle, respectively. Also, ts is the time of the impact. I should also mention that whatever I'd tried didn't lead anywhere.

One more question: why doesn't the animation stop at the point of impact unless \I set the ruler to be {t,0,ts} in the Manipulate function. Shouldn't it stop because of this piece of code?:

traj1 = Table[xy, {t, 0, ts, 0.1}];
traj2 = Table[zy, {t, 0, ts, 0.1}];

Thank you in advance, and I am begging you to be somewhat thorough with your answer as I've just started using Mathematica. :)

POSTED BY: zare maz
2 Replies
Posted 4 years ago

Crossposted here.

POSTED BY: Rohit Namjoshi
Anonymous User
Anonymous User
Posted 4 years ago

I've written a "simulator" to do that once.

You could use iteration and vectors of speed.

Each partial has a position, a direction, speed that is updated "per turn".

When all particles are updated, it would move it's share of amount because it was updated due to the collisions. Of course, it's all done in vectors so the speed has a vector / direction

That's one way to do it.

But be aware this is an "over solved problem", may people have done it already, there are more advanced ways to do things (including whole solar simulators and rendering platforms to visualize events).

POSTED BY: Anonymous User
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard

Group Abstract Group Abstract