As a general answer to the question, if your polygons can be described as a set of line segments ( where a line is a->b ) it can be very simple to determine which intersect and where, simply by checking each segment against each segment.

Now, making that run quickly is an exercise up to the reader. Obvious approaches involve spatial partitioning ( to minimize the set of which lines *might* intersect others ) and boundary-box checks.

Also, if your polygons involve bezier curves, or splines or the like, it would be best to have -- if performance is an issue -- a high quality subdivision for rendering, and a low quality version for collision detection.

I have some code, if you want to see ( mine only handles beziers, though, and it's very ugly since I wrote it 6 or 7 years ago and was screwing around, but it works ).