移动球从惰性球反弹的角度

时间:2011-04-03 22:11:06

标签: java math physics collision

让两个球,其中一个在笛卡尔坐标平面上移动,而另一个是静止和不动的。在某些时候,移动的球与惰性球碰撞。假设移动的球在一条直线上行进,在得到以下信息的情况下,如何得出移动球将被推进的新角度:

移动球的中心坐标(X0,Y0),半径(R0)和撞击前的行进角度(A0)

固定球的中心坐标(X1,Y1)和半径(R1)

5 个答案:

答案 0 :(得分:12)

如果你的第二个球有无限质量:

enter image description here

phi(长时间计算后)是:

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]))
           ]

其中:

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

修改

要确定整个轨迹,您还需要在撞击时移动球的中心坐标。他们是:

  {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]}

答案 1 :(得分:4)

Pool Hall Lessons by Joe van den Heuvel, Miles Jackson的第3页给出了如何做到这一点的一个很好的例子。

// 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);

至少阅读第三页,了解这里发生的事情。

答案 2 :(得分:3)

您应该查看维基百科上的elastic collision文章。我会在这里解释,但我可以说的一切,维基百科说它更好,并有明确的例子和方程式。

答案 3 :(得分:2)

很久很久以前,我把它作为本科生来学习。 ]

你需要清楚群众。可能你假设两个球都具有相同的质量,而不是一个具有无限质量的球。

第二件事是:您是否有兴趣考虑滚动约束和线性动量。你会遇到的一种简单的弹性碰撞的对话就会忽略这一切。作为一个例子,考虑在水池/斯诺克中投球,你故意将球从中点击出以产生前或后旋。

你想要这样做吗?

如果是这样,你需要考虑旋转球和表面之间的摩擦。

例如,在滚球和静止球之间的“简单”直接碰撞中,如果我们假设完全有弹性(再次不完全正确):

  • 初始碰撞停止移动球'A'
  • 静止球'B'开始以'A'
  • 的撞击速度移动
  • 'A'仍有旋转,它抓住表面并拾取一些小速度
  • 'B'开始没有旋转,必须将其与速度相匹配才能滚动。这导致它略微放缓。

对于简单的情况,如果转换为质心的坐标,则计算会更容易。在那个框架中,碰撞总是直接碰撞,反转球的方向。然后你转换回来得到结果。

假设在v1和w1影响之前的质量和速度。

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

发生碰撞后,我们有一个简单的反思:

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

v2 = v2_prime + V0
w2 = w2_prime + V0

答案 4 :(得分:0)

它只是从静止球反射出来。因此,计算接触点(球的中心将分开R0 + R1),反射轴将是连接中心的线。

编辑:我的意思是在接触点连接中心的线将有一个角度,你可以使用这个角度来帮助计算移动球的新角度。