The angle that a moving ball bounces off an inert ball

Let there be two balls, one of which moves in the Cartesian coordinate plane, and the other is motionless and motionless. At some point, the moving ball collides with an inert ball. Assuming that the moving ball moves in a straight line, how can we get a new angle at which the moving ball will move, taking into account the following information:

Coordinates of a moving spherical center (X0, Y0), radius (R0) and angle of movement before impact (A0)

Stationary coordinates of the center of the ball (X1, Y1) and radius (R1)

+4
source share
5 answers

If your second ball has infinite mass:

enter image description here

Where is phi (after a long subtraction):

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 entire path, you will need the coordinates of the center of the moving ball during the impact. It:

  {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]} 
+12
source

Page 3 of Joe van den Hewell's Poolside Classes, Miles Jackson provides an excellent 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 the third page to understand what is happening here.

+4
source

You should take a look at the elastic collision article on Wikipedia. I will explain here, but all I could say, Wikipedia says it better and with clear examples and equations.

+3
source

[Once upon a time I studied this as a teenager. ]

You need to be clear to the masses. You are probably accepting equal mass for both balls, unlike one being of infinite mass.

Secondly, you are interested in considering rolling limitations as well as linear momentum. The treatments you come across that speak of simplified elastic collision ignore all this. As an example, consider snapshots in a pool / snook where you intentionally remove the ball from the middle to generate a front or rear spindle.

Do you want to do this?

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

For example, in a β€œsimple” direct collision between a rolling ball and a stationary ball, if we assume that it is perfectly elastic (again, not quite right):

  • initial collision stops the moving ball 'A'
  • fixed ball 'B' begins to move at the speed of impact 'A'
  • 'A' still has a spin, it grabs the surface and picks up little speed
  • 'B' starts without rotation and must match its speed in order to roll. This leads to a slight slowdown.

For the simplified case, the calculation is much simpler if you go to the coordinates of the center of mass. In this frame, a collision is always a direct collision that changes the direction of the balls. Then you just convert back to get the resulting data.

Assuming mass and velocity indices before exposure to 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 

After the collisions, 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 
+2
source

It simply reflects from a motionless ball. So, calculate the contact point (the centers of the balls will be R0 + R1 from each other), and the axis of reflection will be the line connecting the centers.

EDIT: By this, I mean that the line connecting the centers at the point of contact will have an angle, and you can use this angle to help calculate the new angle of the moving ball.

0
source

Source: https://habr.com/ru/post/1346482/


All Articles