二维弹性球碰撞物理

标签 2d physics collision

我正在制作一个涉及弹性球物理的程序。我已经计算出与墙壁和静止物体碰撞的所有数学运算,但我无法弄清楚当两个移动的球碰撞时会发生什么。我有质量和速度(准确地说是 x 和 y 速度,但每个球的速度及其方向都可以)并且想要这些公式。记住 - 这是一个完美的弹性碰撞 - 所以没有旋转球等。

最佳答案

wikipedia article提供了计算两个粒子碰撞后速度的公式:





使用这个公式的原因有很多:

  • 您只需要碰撞前球的速度矢量、它们的质量和位置,
  • 您不需要定义偏差角度,
  • 操作很简单(只需要点积),
  • 向量可以用任何坐标系表示。

  • 维基百科文章中没有证据,所以我在下面提供。

    问题定义

    enter image description here

    对于每个球,我们定义:
  • 我的质量
  • vi 碰撞前的速度矢量
  • v'i 碰撞后速度矢量
  • Oi 中心点
  • xi Oi 位置的向量

  • 单位向量 在接触点垂直于球的表面。



    单位向量 电话 在接触点与球的表面相切。

    物理定律使用

    总动量守恒表示为:



    总动能守恒表示为:



    由于在切线方向没有施加力,碰撞后速度的切向分量不变:



    证明

    速度的切向分量不变。所以我们可以用普通分量重写守恒定律,我们现在有一个一维问题:



    动能守恒可以分解,然后用动量守恒简化:





    我们将最后一个表达式与动量守恒结合起来,我们得到了 的法向分量。 v'1 :



    最后,我们找到了维基百科文章 的公式v'1 :



    的公式v'2 是对称的。

    关于二维弹性球碰撞物理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35211114/

    相关文章:

    java - 在矩形数组中查找重叠的最快方法是什么?

    c++ - 在由形成凸四边形的 4 个点定义的一组 6 个线段中查找对角线的算法

    c - C中推荐的二维条码生成器api

    javascript - 使一个圆重叠时不被另一个圆排斥?

    javascript - Verlet/Euler 积分不准确

    java - 使用算法和 Rectangle.intersects (java/lwjgl) 的碰撞检测

    Java2D 碰撞无法正确处理图 block 大小

    android - 如何以其中心 : corona SDK 旋转组合物理体

    基于 Java 2D 方 block 的游戏碰撞(上/下/左/右)

    c++ - Opengl 中的球体-立方体碰撞检测?