math - 计算两个运动球将碰撞的x/y点

标签 math language-agnostic collision-detection physics

我正在尝试制作(本质上)简单的台球游戏,并希望能够预测一杆击中另一个球后的去向。

我相信,第一部分是计算母球是否会击中任何东西,如果击中,它将在何处发生碰撞。我可以计算直线和一个球的碰撞点,但不能计算两个球。

因此,给定2个球的x/y位置和速度,我如何计算它们碰撞的点?

(PS:我知道我可以通过计算整个过程中每一步两个球之间的距离来做到这一点,但我希望可以得到一些更优雅,更理想的东西。)

设置示例:尝试计算红点

http://dl.dropbox.com/u/6202117/circle.PNG

最佳答案

需要注意的一些事情:

  • 当两个球的半径r碰撞时,它们的中心彼此分开2r
  • 可以假设您的第一个球是直线移动(嗯,是第一个近似值,但以此为起点),您可以找到该路径与从第一个球到第二个球的方向之间的夹角alpha
  • 您知道固定球的中心,不是吗?

  • 现在您有一些几何要做。

    做这个构造:
  • 将第一个(移动的)球的当前中心标记为A点。
  • 将固定球的中心标记为B点。
  • 构造线段AB
  • R沿移动方向构造射线A
  • 2r周围构造一个半径为B的圆。
  • B垂直于R的地方放一个线段,称为相交点C
  • 您知道AB的距离,并且可以找到alphaAB之间的角度R,而《正弦定律》可以找到BC的长度。
  • 从该长度确定是否有0、1或2个解决方案。如果为0或1,则操作完成。
  • 构造点D,在该点上圆与A靠近的R相交,并再次使用正弦定律找到距离AD。
  • 碰撞点是BD的中点

  • 现在你知道了一切。

    以此为基础构建有效的代码是一项练习。

    顺便说一句-如果两个球都在移动,则此构造将不起作用,但是您可以将其转换为一个静止的框架,以这种方式求解,然后再转换回去。只需确保在逆向转换后检查解决方案是否在允许的范围内...

    /物理学家不能不能做出这样的评论。我试图抗拒。我真的做到了

    关于math - 计算两个运动球将碰撞的x/y点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3692532/

    相关文章:

    java弹跳球碰撞不起作用

    r - 生成两组数字,其中每组数字之和及其点积之和为 N

    javascript - 关于 0xFFFFFFFF ^ 97 Go 和 Javascript 有什么区别

    数学范围到百分比

    oop - "ctor"在类构造函数中代表什么?

    c# - 与不可见网格的 Irrlich 碰撞

    c++ - mirror这段代码可以进行什么样的矩阵变换呢?

    javascript - 如何通过 map 上的半径和中心计算东北坐标

    database - 三个客户地址在一个表中还是在不同的表中?

    ios - 如何让一个自由下落的 Sprite 节点坐在另一个水平移动的 Sprite 身上