```# Circles on Circles

# adapted from Pascal Program by Bernie Gunn

# by Kirby Urner

# Version 1.0: Sept 19, 2004

# Requires PIL (Python Imaging Library)

from math import sin, cos, radians
import Image, ImageDraw, ImageFont # PIL must be installed

def setup(rot, width, height, bg = 'White', txtcolor = "Blue"):
"""
Initialize/return canvas, draw objects, draw text
"""
canvas = Image.new('RGB',(width, height), bg)
draw   = ImageDraw.Draw(canvas)

# add title and caption to canvas

font1   = ImageFont.truetype('verdana.ttf', 32)  # requires latest PIL, ttfs

font2   = ImageFont.truetype('verdana.ttf', 16)

title  = "Circles on Circles"
wtitle, htitle = font1.getsize(title) # used to place text

caption = "Rotation Factor = %s" % rot
wcaption = font2.getsize(caption)[0]

draw.text((width/2  - wtitle/2, 20),  title,   font = font1, fill = txtcolor)
draw.text((height/2 - wcaption/2, 40 + htitle), caption, font = font2, fill = txtcolor)

return (canvas, draw)  # objects required in other modules, avoiding any global variables

def mainloop(rot, width, height, draw, color = 'Black'):
"""
Compute the points, draw lines connecting them
"""

R1 = 140
R2 = 140
j  = 0

xcenter = width/2
ycenter = height/2

while j <= 360:

k = j * rot

point    = (x1 + x2 + xcenter, y1 + y2 + ycenter)

if j > 0:
draw.line([oldpoint, point], color)

oldpoint = point
j += 0.25  # quarter-degree increments (smoother curves)

def finish(canvas):
"""
Display the canvas in a default viewer, then save it to file
"""
canvas.show()  # in Windows, uses default bmp viewer

canvas.save("./Lib/site-packages/mycircles.png","PNG") # presuming this path exists

print "Image saved."

def main(width=800, height=800):
rot = int(raw_input("Rotate Outer circle by what factor of inner?: "))
canvas, draw = setup(rot, width, height, bg='Black', txtcolor='Yellow')  # bg, txtcolor optional

mainloop(rot, width, height, draw, color='Orange')        # draw color optional

finish(canvas)

# added so this may run as a script, vs imported as a module

if __name__ == "__main__":
main()

```
`# code highlighted using py2html.py version 0.8`