Angle that a moving ball will bounce off of an inert ball

眉间皱痕 提交于 2020-01-03 15:49:27

问题


Let there be two balls, one of which is moving about in the Cartesian coordinate plane, while the other is stationary and immobile. At some point, the moving ball collides with the inert ball. Assuming the moving ball is traveling in a straight line, how can one derive the new angle that the moving ball will be propelled given the following information:

The moving ball's center coordinates (X0, Y0), radius (R0), and angle of travel before impact (A0)

The stationary ball's center coordinates (X1, Y1) and radius (R1)


回答1:


If your second ball has infinite mass:

Where phi (after a long calc) is:

phi=  -ArcTan[
         ( 2 R^2 Sin[A0] + 2 (YD Cos[A0] - XD Sin[A0]) (2 H Cos[A0] + 
           2 XD Sin[A0]^2 - YD Sin[2 A0]))  /
         ((2 R^2 - XD^2 - 3 YD^2) Cos[A0] + (XD^2 - YD^2) Cos[3 A0] + 
           8 XD YD Cos[A0]^2 Sin[A0] + 4 H Sin[A0] (-YD Cos[A0] + XD Sin[A0]))
           ]

Where:

H   = (R0 + R1)^2 - ((Y0 - Y1) Cos[A0] + (X0 - X1) Sin[A0])^2  
R^2 = (R0 + R1)^2
XD  =  X1 - X0
YD  =  Y1 - Y0

Edit

To determine the whole trajectory, you'll also need the coordinates for the center of the moving ball at the time of impact. They are:

  {X,Y}= {X1+Sin[A0] ((Y1-Y0) Cos[A0]+ (X0-X1) Sin[A0])-Cos[A0] Sqrt[H],
          Y1+Cos[A0] ((Y0-Y1) Cos[A0]+(-X0+X1) Sin[A0])-Sin[A0] Sqrt[H]}



回答2:


Page 3 of Pool Hall Lessons by Joe van den Heuvel, Miles Jackson gives a great example of how to do this.

// First, find the normalized vector n from the center of circle1 to the center of circle2
Vector n = circle1.center - circle2.center;
n.normalize();
// Find the length of the component of each of the movement vectors along n. 
float a1 = v1.dot(n);
float a2 = v2.dot(n);

float optimizedP = (2.0 * (a1 - a2)) / (circle1.mass + circle2.mass);

// Calculate v1', the new movement vector of circle1
// v1 = v1 - optimizedP * m2 * n
Vector v1 = v1 - optimizedP * circle2.mass * n;

// Calculate v2', the new movement vector of circle2
// v2 = v2 + optimizedP * m1 * n
Vector v2 = v2 + optimizedP * circle1.mass * n;

circle1.setMovementVector(v1);
circle2.setMovementVector(v2);

Read at least page three to understand whats going on here.




回答3:


You should take a look at the elastic collision article on wikipedia. I would explain here, but everything I could have said, wikipedia says it better and with clear examples and equations.




回答4:


[A long, long time ago I studied this as an undergrad. ]

You need to be clear on the masses. Probably you are assuming equal mass for both balls, as opposed to one being of infinite mass.

The second thing is: Are you interested in considering rolling constraints as well as linear momentum. The treatments you will come across which talk along the lines of a simplistic elastic collision ignore all this. As an example, consider shots in pool/ snooker where you deliberately strike the ball away from the midpoint to generate front or backspin.

Do you want to able to do this?

If so, you need to consider the friction between a spinning ball and the surface.

For example in a "simple" straight-on collision between a rolling ball and a stationary one, if we assume perfectly elastic (again not quite true):

  • the initial collision stops the moving ball 'A'
  • the stationary ball 'B' starts moving at the impact speed of 'A'
  • 'A' still has spin, it grips the surface and picks up some small velocity
  • 'B' starts without spin and has to match it to its speed in order to roll. This results in it slowing slightly.

For the simplistic case, the calculation is much easier if you transform to the coordinates of the centre of mass. In that frame, the collision is always a straight-on collision, reversing the direction of the balls. You then just transform back to get the resultants.

Assuming indetical masses and speeds prior to the impact of v1 and w1.

V0 = centre of mass speed = (v1+w1)/2
v1_prime = v of mass_1 in transformed coords = v1 - V0
w1_prime = w1 - V0

Post collision, we have a simple reflection:

v2_prime = -v1_prime  (== w1_prime)
w2_prime = -vw_prime  (== v1_prime)

v2 = v2_prime + V0
w2 = w2_prime + V0



回答5:


It simply reflects from the stationary ball. So compute the point of contact (the centres of the balls will be R0 + R1 apart) and the axis of reflection will be the line joining the centres.

EDIT: By which I mean the line joining the centres at the point of contact will have an angle, and you can use this angle to help compute the new angle of the moving ball.



来源:https://stackoverflow.com/questions/5532891/angle-that-a-moving-ball-will-bounce-off-of-an-inert-ball

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!