java - 移动的球从惰性球弹回的角度

标签 java math physics collision

假设有两个球,其中一个在笛卡尔坐标平面内移动,而另一个静止不动。在某个时刻,移动的球与惰性球发生碰撞。假设移动的球沿直线行进,如何根据以下信息推导出移动的球将被推进的新角度:

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

静止球的中心坐标(X1,Y1)和半径(R1)

最佳答案

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

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

关于java - 移动的球从惰性球弹回的角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5532891/

相关文章:

cocos2d-iphone - 在没有连续碰撞的情况下检测两个 box2d 物体的初始碰撞

iOS - Cocos2d、Box2d 或 Chipmunk

java - native 库如何成为 APK 文件的一部分

java - Eclipse Indigo 中的源代码导航和 JavaDoc 错误

Javascript - 更改数量时调整价格

c# - 求 C 点与 AB 垂线 BC

android - 磁场、旋转矩阵和全局坐标

java - Box2D 使用 LIBGDX 将轮子放在正确的位置

java - 通用文件系统的 FileInputStream

java - 在java中自动计算圈复杂度的工具?