ballaw
ballaw

Reputation: 1499

Trigonometry and collisions/reflection in Pong game

For fun I am making Pong in Python with Pygame. I have run into some trouble with reflections.

So the ball has an angle associated with it. Since positive y is down this angle is downward. If the ball hits the top or bottom walls I can simply negate the angle and it will reflect properly, but the trouble is with the left and right walls. I cannot figure out the trigonometry for how to change the angle in this case. I am currently trying combinations of the below snippet but with no luck.

 self.angle = -(self.angle - math.pi/2)

I have attached the code. You can try it for yourself easily. Just remember to take out the "framerate" module which I have not included or used yet. I would appreciate any input. Thanks!

Upvotes: 0

Views: 2540

Answers (2)

House
House

Reputation: 3496

You'll want to look into Angle of Incidence.

enter image description here

Basically you'll want to find the angle theta between your incoming vector and the normal of the wall the ball is hitting. Where the incoming angle is (wall normal)-theta the resulting angle is (wall normal)+theta.

The angle can be found using the dot product between your incoming vector and the normal of the wall, then taking the inverse cosine (normalize your vectors first).

Upvotes: 1

zch
zch

Reputation: 15278

You should use:

math.pi - angle

Upvotes: 0

Related Questions