Ejs Open Source 2D Collision Model java applet by Fu-Kwun Hwang, edited by Wolfgang Christian and Robert Mohr
very slightly edited by lookang

reference:
http://www.phy.ntnu.edu.tw/ntnujava/index.php?topic=120.0

/htdocs/ntnujava/ejsuser/14019/users/sgeducation/lookang/ElasticCollision_pkg/ElasticCollision.propertiesFull screen applet or Problem viewing java?Add http://www.phy.ntnu.edu.tw/ to exception site list
Download EJS jar file(747.5kB):double click downloaded file to run it. (65 times by 25 users) , Download EJS source (28 times by 14 users) View EJS source  Elastic Collision writeup by Wolfgang Christian and Robert Mohr http://www.compadre.org/osp/items/detail.cfm?ID=8373
The EJS Elastic Collision model allows the user to simulate a two-dimensional elastic collision. The user can modify the mass, position and velocity of each disk using the sliders.  Both disks are also draggable and the center of mass is shown a a cross in the simulation.
A checkbox option allows the user to pause the simulation when a collision occurs. The pale blue arrows show the momenta of the disks immediately before the collision and the dark blue arrows show the momenta after the collision.  The red arrows show impulse (change in momentum) of each disk caused by the collision.  Note that the impulse vectors are equal and opposite and that the impulse direction is parallel to the line connecting the disk centers.
Theory:
Newtonian mechanics predicts that for an isolated system total momentum is always conserved and total energy is conserved if the particles do not have hidden degrees of freedom such  as spin or heat capacity.  Collisions that conserve energy are said to be totally elastic because the balls bounce off of each other.
Conservation laws play a fundamental role in physics and most physicists would argue that they are more fundamental then Newton's Laws.  In the Elastic Collision model, conservation of energy and momentum are used to compute the trajectories of two balls aced on by a strong but brief collision force.  The hard disk (impulse) approximation assumes that the interaction acts instantaneously along a line connecting the particle centers when the the particles come into contact.  Because the particles do not interact except for this brief instant, we need only consider kinetic energy when computing the total energy of the system.
E[sub]total[/sub] = (1/2) m[sub]1[/sub] v[sub]1[/sub][sup]2[/sup]  + (1/2) m[sub]2[/sub] v[sub]2[/sub][sup]2[/sup]
The total momentum of the system is easy to compute and is the sum of the momentum of the two particles.
p[sub]total[/sub] = m[sub]1[/sub] v[sub]1[/sub]  + m[sub]2[/sub] v[sub]2[/sub]
The bold typeface indicates that momentum and velocity are vectors so the above equation becomes to two equations when written component form.
References:
Giancoli Physics: Principles with Applications sixth edition, 175-181.
Credits:
The Elastic Collision model was created by Fu-Kwun Hwang using the Easy Java Simulations (EJS) modeling tool. It was adapted to EJS version 4.1 by Wolfgang Christian and Robert Mohr at Davidson College.  You can examine and modify the model for this simulation if you have Ejs installed by right-clicking within the simulation frame and selecting "Open Ejs Model" from the pop-up menu.  Information about EJS is available at: and in the OSP ComPADRE collection .

Explanation by Fu-Kwun Hwang http://www.phy.ntnu.edu.tw/ntnujava/index.php?topic=120.msg3541#msg3541
You need to understand conservation of momentum and conservation of energy.
The velocity of two objecs after collision (V[sub]1[/sub]',V[sub]2[/sub]')can be calculated from velocity before collisions (V[sub]1[/sub],V[sub]2[/sub]) and mass of two objects (m[sub]1[/sub],m[sub]2[/sub]).

V[sub]1[/sub]'= (m[sub]1[/sub]-m[sub]2[/sub])*V[sub]1[/sub]/(m[sub]1[/sub]+m[sub]2[/sub]) + 2*m[sub]2[/sub]*V[sub]2[/sub]/(m[sub]1[/sub]+m[sub]2[/sub])= (m[sub]1[/sub]V[sub]1[/sub]+m[sub]2[/sub]V[sub]2[/sub])/(m[sub]1[/sub]+m[sub]2[/sub])+(V[sub]2[/sub]-V[sub]1[/sub])*m[sub]2[/sub]/(m[sub]1[/sub]+m[sub]2[/sub])=V[sub]cm[/sub]+(V[sub]2[/sub]-V[sub]1[/sub])*m[sub]2[/sub]/(m[sub]1[/sub]+m[sub]2[/sub]);

V[sub]2[/sub]'=2*m[sub]1[/sub]*V[sub]1[/sub]/(m[sub]1[/sub]+m[sub]2[/sub])+(m[sub]2[/sub]-m[sub]1[/sub])*V[sub]2[/sub]/(m[sub]1[/sub]+m[sub]2[/sub])=(m[sub]1[/sub]V[sub]1[/sub]+m[sub]2[/sub]V[sub]2[/sub])/(m[sub]1[/sub]+m[sub]2[/sub])+(V[sub]1[/sub]-V[sub]2[/sub])*m[sub]1[/sub]/(m[sub]1[/sub]+m[sub]2[/sub])=V[sub]cm[/sub]+(V[sub]1[/sub]-V[sub]2[/sub])*m[sub]1[/sub]/(m[sub]1[/sub]+m[sub]2[/sub]);

Where V[sub]cm[/sub]=(m[sub]1[/sub]V[sub]1[/sub]+m[sub]2[/sub]V[sub]2[/sub])/(m[sub]1[/sub]+m[sub]2[/sub]);
Before the collision, the velocity of m[sub]1[/sub] relative to V[sub]cm[/sub] is
V[sub]1[/sub]-V[sub]cm[/sub]=V[sub]1[/sub]-(m[sub]1[/sub]V[sub]1[/sub]+m[sub]2[/sub]V[sub]2[/sub])/(m[sub]1[/sub]+m[sub]2[/sub])=m[sub]2[/sub](V[sub]1[/sub]-V[sub]2[/sub])/(m[sub]1[/sub]+m[sub]2[/sub])
compare it with the second term in V[sub]1[/sub]'

For collision 2D, the trick is to transform it into collision 1D problem:
In the direction of red arows, and another direction normal to red arrows (i.e. direction of green arrows).
If friction is not considered (which will cause both balls to rotate due to friction force),
Then green arrow velocity is not changed after the collision because there is no force in that direction.
And collision in red arrow direction is 1D collision problem, so you can use the above equation.
However, you need to calculate the component of velocity in red arrow direction. (This you need to understand the meaning of inner product -- mathematic operation).