从表面弹出一个球

Mik*_*ley 4 collision game-physics

我目前正在编写像Breakout这样的游戏,我想知道如何才能将球从球面上弹开.

我采用天真的方式将速度旋转了90度,这是:

[vx, vy] -> [-vy, vx]
Run Code Online (Sandbox Code Playgroud)

哪个(不足为奇)没有那么好用.如果我知道球的位置和速度,以及球将击中的点(但是反而会反弹)我怎么能从那个点反弹?

约束:

  • 我正在使用整数数学(无FP在任何地方)
  • 我所有的表面都是简单的平面(垂直,水平或块)
  • 我只想以90度的角度反弹
  • 所有碰撞都是纯粹的弹性(这是突破 - 不需要摩擦等)

我不需要任何特定于语言的代码.如果有人能提供一个小的数学公式来说明如何正确地做到这一点对我来说很好.

谢谢!

ret*_*ile 5

假设您只是从垂直或水平表面反弹,您可以分别否定X或Y方向的速度.

所以,如果你有[vx,vy],并且它从垂直墙反弹,你将[-vx,vy].

如果你有[vx,vy],并且它从水平墙反弹,你将[vx,-vy].


Kan*_*niu 5

我会在水平墙上尝试[vx,vy] - > [vx,-vy],在垂直墙壁上尝试[vx,vy] - > [-vx,vy].