# Simple conservation of momentum and frame of reference problem

I'm making a very simple physics engine based on momentum, and I'm solving what response to use for a collision from each involved object's frame of reference. However, something about how I'm interpreting frame of reference isn't quite right...

Consider the below example, with a 1g object moving 10 m/s toward a 10g object. No friction or rotation or anything complicated.

That 1g object eventually hits the 10g object. Now, my engine would then look at each object from its frame of reference (so its velocity, basically) and sum the external momentums on it (in case there are multiple collisions) and use that to change its own velocity. There's only 2 objects involved in this example to keep it simple.

So from the 10g unmoving object's frame of reference, the 1g object is hitting it with basically that same velocity vector (so 10 gm/s momentum). From the 1g object's frame of reference, the 10g object is moving toward it at 10 m/s and hitting it from the right with... 100 gm/s?? That doesn't make any sense!

I'm really messing up frame of reference here somehow... I need to use the frame of reference of each object, but I'm pretty sure that the momentum I'm getting in some of them is simply incorrect.

That 1g object, when doing some sort of equal response to that 100 gm/s momentum, would then get launched backward at 90 m/s (10 m/s - (100 gm/s / 1g))! I'd then calculate how the 10g object moves based on the momentum it sees, resulting in it moving forward at 1 m/s. Where am I going wrong here?

-
If you are going to solve it in one of the objects' rest frames you will need to stick to it, because by switching from one to the other, you are obviously changing things. Usually it's easiest to work in the centre of mass frame. Also, you will need to consider conservation of energy in addition to conservation of momentum, and specify whether your collision is supposed to be elastic or inelastic (or to what degree), to figure out the exact distribution of speeds after the collision. – Martin Ender May 10 '13 at 19:45

You're not doing anything wrong, the objects will have different momenta in different reference frames. What should be the same in every reference frame is the forces acting on the objects during the collision. The laws of physics are the same in every reference frame, but not necessarily the numbers that go into the equations.

By way of example, lets consider the collision as a perfectly inelastic one.

Reference frame 1, initial momentum is

$u_1m_1+u_2m_2 = 0.001 * 10 + 0.01 *0 = 0.01 Kg ms^{-1}$

Initial kinetic energy is

$\frac{1}{2} m_1 u_1^2 + \frac{1}{2}m_2u_2^2 = 0.5 *0.001 *100 = 0.05 J$

By conservation the momentum after the collision must still be $0.01 Kg ms^{-1}$ and we have defined the collsion as perfectly inelastic so we know $v_1=v_2$.

$m_1v_1+m_2v_2=m_1v_1+m_2v_1=(m1+m2)v_1$

$v_1=\frac{0.01}{0.011}=0.909090..ms^{-1}$

Final kinetic energy is

$\frac{1}{2} m_1 v_1^2 + \frac{1}{2}m_2v_2^2 = 0.5 *0.001 * 0.826 + 0.5 * 0.01 *0.826 = 0.004545.. J$

Repeating the exercise in reference frame 2 and we have:

initial momentum is

$u_1m_1+u_2m_2 = 0.001 * 0 + 0.01 *-10 = -0.1 Kg ms^{-1}$

Initial kinetic energy is

$\frac{1}{2} m_1 u_1^2 + \frac{1}{2}m_2u_2^2 = 0.5 *0.01 *100 = 0.5 J$

velocity for the joined mass after collision is

$\frac{-0.1}{0.011}=-9.0909... ms^{-1}$

and kinetic energy after the collision is

$\frac{1}{2}*0.011 * 82.64 =0.4545..J$

So, change in velocity for object 1:

• In reference frame 1: $0.9090.. ms^{-1} - 10 ms^{-1} = -9.0909..ms^{-1}$

• In reference frame 2: $-9.0909..ms^{-1} - 0 ms^{-1} =-9.0909..ms^{-1}$

And for object 2:

• In reference frame 1: $0.9090.. ms^{-1} - 0 ms^{-1} = 0.9090..ms^{-1}$

• In reference frame 2: $-9.0909..ms^{-1} - -10 ms^{-1} =0.9090..ms^{-1}$

Change in system kinetic energy:

• In reference frame 1: $0.004545.. J - 0.05 J = -0.04545...J$

• In reference frame 2: $0.4545...J - 0.5 J = -0.04545...J$

Whew, I always feel like I've done a magic trick after swapping reference frames (is this your card?) Hopefully this makes it clear that despite the objects having differing momenta and energy in the reference frames, the collision is still the same.

That said, for a physics simulation jumping from reference frame to reference frame is probably just making work for yourself. Personally I'd just stick to an absolute$^1$ reference frame and have done with it.

Hope that helps!

$^1$ The advantage of working in a simulation is that there is an absolute reference frame and it can be wherever you say it is.

-

The problem is that your frame of reference, if you put it in an object that is accelerating is not an inertial one; the discrepancies are due to inertial forces that you're not taking into account. Why don't you just observe things from a fixed, absolute, inertial reference frame, instead?

-
Things get weird when objects are in contact with other objects then one gets hit, or all the objects are moving at different velocities, or whatever. Plus there's just the optimization factor. But I guess if it doesn't work, it doesn't work. Back to the drawing board... – user173342 May 10 '13 at 20:08
May I ask you what's the problem in solving the dynamics in just one reference frame? Maybe we can figure out a solution! – Alex A May 10 '13 at 20:26
I'm messing around with a "solver" that deals with an individual object and its direct surroundings (things in contact/colliding). So it loops through all the objects involved when a collision is detected, dealing with them one at a time. I think I can still do that with one reference frame, I just need to stop thinking of each object solution as being in its "frame of reference" and instead consider it in its "circle of influence". So basically I'm gonna make sure I multiply velocity with the mass of the object that has it. Doesn't help with kinetic energy, but that's a real pain – user173342 May 10 '13 at 20:40