mandel = (x0, y0, x1, y1, w, h, maxiter) -> [dx, dy] = [(x1 - x0) / w, (y1 - y0) / h] res = [] y = y0 for yc in [0..h-1] x = x0 for xc in [0..w-1] [xx, yy] = [x, y] c = '*' for i in [0..maxiter-1] # (xx+i*yy)^2 + (x+i*y) = xx^2 + i*2*xx*yy - yy^2 + x + i*y # = (xx^2 - yy^2 + x) + i*(2*xx*yy + y) [xx2, yy2] = [xx*xx, yy*yy] if xx2 + yy2 >= 4.0 c = '.' break [xx, yy] = [xx2 - yy2 + x, 2*xx*yy + y] res.push(c) x += dx res.push('\n') y += dy print(res.join('')) return mandel(-2, 2, 2, -2, 200, 100, 1000)