The presented code definitely has room for a lot of optimization. My solution for drawing arcs was to either render it with two circles to a surface, and then crop/cut it out, or to just use OpenGL. The idea would be to use many small subdivisions just as with the polygon drawing method for PyGame.
I suppose the absolute fastest thing to do (short of just doing it in your favorite paint program and just drawing it as an image) would be to write a fragment program and run it on the GPU. 'Course, that's overkill . . . right? Ian