Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bouncing a ball off a surface

I'm currently in the middle of writing a game like Breakout, and I was wondering how I could properly bounce a ball off a surface.

I went with the naive way of rotating the velocity by 90 degrees, which was:

[vx, vy] -> [-vy, vx]

Which (unsurprisingly) didn't work so well. If I know the position and veocity of the ball, as well as the point the ball would hit (but is going to instead bounce off of) how can I bounce it off that point?

Constraints:

  • I'm using integer math (No FP anywhere)
  • All my surfaces are simple flat surfaces (Vertical, horizontal, or a block)
  • I only want to bounce off in a 90 degree angle
  • All collisions are purely elastic (This is breakout -- No need to friction, etc)

I don't need any language specific code. If anyone could provide a small, mathematical formula on how to properly do this that would work fine for me.

Thanks!

like image 799
Mike Bailey Avatar asked Nov 29 '22 18:11

Mike Bailey


1 Answers

Assuming you are only going to be bouncing off of either vertical or horizontal surfaces, you can just negate the velocity in the X or Y directions, respectively.

So, if you have [vx, vy], and it bounces off a vertical wall, you will have [-vx, vy].

If you have [vx, vy], and it bounces off a horizontal wall, you will have [vx, -vy].

like image 133
retracile Avatar answered Dec 18 '22 02:12

retracile