Mark Meyer | Parametric surfaces | circle curves

size(550, 550)
colormode(HSB)
background(0.2, 0.02, 0.2)
nofill()
stroke(0.2, 0.1, 0.8, 0.7)
strokewidth(0.25)
from math import sin, cos
def circle_equation(r, dt):
center_x = 0.0
center_y = 0.0
t = 0.0
while True:
x = center_x + cos(t) * r
y = center_y + sin(t) * r
yield x, y
t += dt
b = 5.5
eq1 = circle_equation(-135, -b)
eq2 = circle_equation(-165, b)
eq3 = circle_equation(150, b)
eq4 = circle_equation(325, b)
x1, y1 = eq1.next()
x2, y2 = eq1.next()
autoclosepath(False)
translate(WIDTH/2, HEIGHT/2)
beginpath(x1+x2, y1+y2)
for i in xrange(360*2):
x1, y1 = eq1.next()
x2, y2 = eq2.next()
x3, y3 = eq3.next()
x4, y4 = eq4.next()
curveto(x4, y4, x3, y3, x1+x2, y1+y2)
endpath()