Angle that a moving ball will bounce off of an ine

2019-06-26 05:21发布

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)

5条回答
爷、活的狠高调
2楼-- · 2019-06-26 05:54

[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
查看更多
Anthone
3楼-- · 2019-06-26 05:59

If your second ball has infinite mass:

enter image description here

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]}
查看更多
神经病院院长
4楼-- · 2019-06-26 06:06

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.

查看更多
叼着烟拽天下
5楼-- · 2019-06-26 06:07

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.

查看更多
冷血范
6楼-- · 2019-06-26 06:09

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.

查看更多
登录 后发表回答