球从曲面弹起

时间:2013-02-06 10:55:33

标签: game-physics

我正在做一个2D球到墙碰撞/弹跳动画程序。我设法做球与球的碰撞,并且球到直线墙碰撞(两者都是精巧的collsion)。

我的问题是,如何在曲线表面反弹的球上进行碰撞?例如,一个球在被困成圆圈时弹跳(圆圈是墙壁)。

干杯

P.S。我正在使用c编程语言

2 个答案:

答案 0 :(得分:2)

基本原则始终是:

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

如果出现圆圈碰撞:

  • r1为一个圆的半径(在3d中,为球)
  • r2成为另一个圆的半径
  • d成为他们中心的距离
  • 如果d>r1+r2,圈子完全在彼此之外
  • 如果r1>r2+d,则第二个圆圈完全在第一个圆圈内
  • 如果r2>r1+d,第一个圆圈完全在最后一个
  • 之内
  • 其他,圆圈重叠:
    • 切线(在3d中,切线平面)垂直于连接两个中心的线
    • 如果第一个圆圈不可移动,请让切平面与第一个圆相切(以获得最佳效果)
    • 否则,切平面位置的最佳选择将取决于两个圆的质量(选择保存质心的位置)
    • 2d中的圆圈永远不会从碰撞中获得角动量,除非是摩擦

答案 1 :(得分:1)

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

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