I have a 2D engine working pretty well that involves rectangles and circles. I just reworked parts of the collision detection/response system for better handling of angular speed/momentum.

The collision response algorithm I’m using is described here: http://www.myphysicslab.com/collision.html (the complicated “j = …” equations towards the bottom of the page under “Physics of Collision for Rigid Bodies in 2 Dimensions”).

Everything’s working great, but I’m wondering about circles. No matter how another another rectangle or circle hits a circle, it’s impossible for the circle to gain angular speed through a collision, since the collision normal vector is always perpendicular to surface of the circle.

This makes sense to me mathematically, but it goes against my real-life intuition. For example, in the picture below, if I poke a ball on the side with a rectangle (tangentially, not towards the middle of the ball), I expect the ball to start spinning (counter-clockwise in this case).

Why isn’t this happening for me? Do I need some kind of non-instantaneous collision (deformation maybe?) to experience this effect? If so, is there a way to “fake” it? (Realistically! I don’t want to mess up the realistic linear/angular momentums and energies of my system!) Thanks in advance for the help!!