1

我正在做一个 2D 球对墙碰撞/弹跳动画程序。我设法进行球对球碰撞,以及球对直线壁碰撞(两者都是弹性碰撞)。

我的问题是,我如何处理从曲面反弹的球的碰撞?例如,一个球在被困在一个圆圈中时弹跳(圆圈是墙)。

干杯

ps 我用的是c编程语言

4

2 回答 2

2

基本原则始终是:

  • 查明是否发生碰撞
  • 找出碰撞的切线
  • 将碰撞视为与线的碰撞

在圆-圆碰撞的情况下:

  • 设为r1一个圆的半径(在 3d 中,球)
  • 设为r2另一个圆的半径
  • d他们的中心的距离
  • 如果d>r1+r2,圆完全在彼此之外
  • 如果r1>r2+d,则第二个圆完全在第一个圆内
  • 如果r2>r1+d,第一个圆圈完全在最后一个圆圈内
  • 否则,圆圈重叠:
    • 切线(在 3d 中,切平面)垂直于连接两个中心的线
    • 如果第一个圆不动,让切平面与第一个圆相切(以获得最佳效果)
    • 否则,切平面位置的最佳选择将取决于两个圆的质量(选择保持质心的位置)
    • 2d 中的圆永远不会从碰撞中获得角动量,除非通过摩擦
于 2013-02-06T11:12:40.923 回答
1

恕我直言,当球被困在圆形墙内时,球的反射将像普通墙一样受到控制,因为墙和球之间的接触点可以忽略不计。唯一的变化是反射平面将与球和墙壁之间的接触点相切。因此,切线的角度在不同的碰撞点将不同,这将决定球的速度角。

我们可以通过将曲面视为一个半径等于曲面曲率的巨大球来处理凸曲面。所以,我们只是在计算 2 个球之间的碰撞。当然,在这种情况下,我们必须考虑表面的质量是无限的,并从弹性碰撞方程中推导出方程。

于 2013-02-06T11:10:21.597 回答