From 40ef62db70dc891035dbcb37410489825315b5b5 Mon Sep 17 00:00:00 2001 From: coolreader18 <33094578+coolreader18@users.noreply.github.com> Date: Sun, 10 Mar 2019 17:42:39 -0500 Subject: [PATCH] Use a generator for the mandelbrot demo snippet --- wasm/demo/snippets/mandelbrot.py | 59 +++++++++++++++++--------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/wasm/demo/snippets/mandelbrot.py b/wasm/demo/snippets/mandelbrot.py index adeeefe13..7d5513719 100644 --- a/wasm/demo/snippets/mandelbrot.py +++ b/wasm/demo/snippets/mandelbrot.py @@ -3,36 +3,39 @@ from browser import request_animation_frame w = 50.0 h = 50.0 -# to make up for the lack of `global` -_y = {'y': 0.0} +def mandel(): + """Print a mandelbrot fractal to the console, yielding after each character + is printed""" + y = 0.0 + while y < h: + x = 0.0 + while x < w: + Zr, Zi, Tr, Ti = 0.0, 0.0, 0.0, 0.0 + Cr = 2 * x / w - 1.5 + Ci = 2 * y / h - 1.0 -def mandel(_time_elapsed=None): - y = _y['y'] - if y >= h: - return - x = 0.0 - while x < w: - Zr, Zi, Tr, Ti = 0.0, 0.0, 0.0, 0.0 - Cr = 2 * x / w - 1.5 - Ci = 2 * y / h - 1.0 + i = 0 + while i < 50 and Tr + Ti <= 4: + Zi = 2 * Zr * Zi + Ci + Zr = Tr - Ti + Cr + Tr = Zr * Zr + Ti = Zi * Zi + i += 1 - i = 0 - while i < 50 and Tr + Ti <= 4: - Zi = 2 * Zr * Zi + Ci - Zr = Tr - Ti + Cr - Tr = Zr * Zr - Ti = Zi * Zi - i += 1 + if Tr + Ti <= 4: + print('*', end='') + else: + print('·', end='') - if Tr + Ti <= 4: - print('*', end='') - else: - print('·', end='') + x += 1 + yield - x += 1 + print() + y += 1 + yield - print() - _y['y'] += 1 - request_animation_frame(mandel) - -request_animation_frame(mandel) +gen = mandel() +def gen_cb(_time=None): + gen.__next__() + request_animation_frame(gen_cb) +gen_cb()