Apparently my collision detection algorithm doesn't quite work, so I'm rewriting it.
The general concept is the same as before: given two convex shapes, I try to select a direction (unit vector) which produces the minimum amount of "overlap", the farthest distance along that direction in one object minus the nearest distance along the other object in the same direction.
I thought the problem was that I was hitting a local minimum (a direction which was better than any of the directions immediately around it, but wasn't the best direction of all), but upon closer examination that's not it. There are no local minima, just narrow "valleys" which my algorithm doesn't know how to get out of.
Bleh
