Pool-Hall Physics


I am creating a simple pool game in visual basic 6 for one of my classes. I had originally decided to use point masses but that is too simple. I found your page that deals with this problem(http://mcanv.com/p1lmc.html) but I haven't been able to work out all the bugs yet. I can't seem to figure out how to find out how to calculate the velocities along the line of sight. Is it just speed*cos(angle) or is it more involved.

The one example I was trying to figure out is that I have two balls. One moveing at 180 degrees and one at 0 degrees. the speed of ball 1 is 10 and ball 2 is 20. when they collide the angel between the centers is 45. In this case is the velocity acting through the center for ball 1 just 10*cos(45). That doesn't seem right since that would give you the x value for a ball moving at 45 degrees. If you could help me with this I would greatly appreciate it. Thank you for whatever you can offer.


The quick way is to assume that the collision all happens within a single chronon (time increment). In that case you just monitor the distance between centers and when it gets down to r1+r2 (the sum of the ball radii) or less, in that time increment you resolve each velocity into its component along the line connecting the ball centers (in the line of sight) and its component perpendicular to that (across the line of sight). Then you apply the head-on collision rules for the components in the line of sight to yield the post collision value of that component.

The component across the line of sight can not be affected by the collision if the balls are frictionless, so that remains the same before and after the collision for each ball. When you have calculated the post collision in line of sight velocities, just add them to their across the line of sight components to get the final post collision velocities.

Of course if the balls have the same mass you only need to exchange the in line of sight velocities in the collision. If the masses are different use the formulae: v1f = v1i * (m1 - m2) / (m1 + m2) + v2i * (2 * m2) / (m1 + m2) v2f = v1i * (2 * m1) / (m1 + m2) + v2i * (m2 - m1) / (m2 + m1) where the subscript i denotes before collision velocities and f denotes post collision.

This information is brought to you by M. Casco Associates, a company dedicated to helping humankind reach the stars through understanding how the universe works. My name is James D. Jones. If I can be of more help, please let me know.



I'm not sure I know how to resolve the velocities along the line of sight. If say the angle is 45 degrees and the ball is moving at 90degrees do I just take the cos(45) to find out what velocity is acting throught the line of sight? Thanks for what you gave me and anything else you can do.


It sounds like you have it right. The length of the velocity vector times the cosine of the angle between that vector and the line of sight will get you the component in the line of sight. Multiply the speed by the sine of that angle to get the component across the line of sight.