I'm currently working on a 2d, vector based game engine. Specifically, the collision detection/response parts.

I thought the separating axis theorem would work well for detection, as it is simple and fast to perform on AABB's (axis aligned bounding boxes), OBB's (oriented bounding boxes) and any other convex hull. You also get the MTD (minimum translation distance) fairly easily when doing the collision detection.

I've got all this nice and working already, so my actual question is: how would one perform a SAT collision check on convex shapes that can not be described by a finite number of points, ie circles, ellipses and maybe even closed splines (if it doesn't prove too slow).

If it is unreasonably slow to perform these checks, I would of course simply approximate the curved collision geometries with polygonal geometries instead.

I've come to understand you need the voronoi regions of the "normal" object to accurately detect collisions between "curved" and non-curved objects. Hower, I cannot quite seem to grasp how to calculate and use these regions in practice.

Also, how would collision between two curved objects be detected?

Any help on the way to figure out these problems will be greatly appreciated. And if you know any good link(s) about physically correct collision responses (prefferably in 2d) and/or swept collision detection, that would also be appreciated.

Pseudo-code or real code is preferred to mathematical notation, please.

Thanks in advance,

Kenki