From 5dbc1aa5a3a3c353aaf6b6153d1eb35781036aad Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Tue, 16 Sep 2014 23:12:03 +0800 Subject: [PATCH] examples: add Mandelbrot demo --- examples/mandelbrot.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 examples/mandelbrot.py diff --git a/examples/mandelbrot.py b/examples/mandelbrot.py new file mode 100644 index 000000000..9a50cc7e5 --- /dev/null +++ b/examples/mandelbrot.py @@ -0,0 +1,42 @@ +import sys + +from artiq.language.core import * +from artiq.devices import corecom_serial, core + +class Mandelbrot(AutoContext): + def col(self, i): + sys.stdout.write(" .,-:;i+hHM$*#@ "[i]) + + def row(self): + print("") + + # based on: http://warp.povusers.org/MandScripts/python.html + @kernel + def run(self): + minX = -2.0 + maxX = 1.0 + width = 78 + height = 36 + aspectRatio = 2 + + yScale = (maxX-minX)*(height/width)*aspectRatio + + for y in range(height): + for x in range(width): + c_r = minX+x*(maxX-minX)/width + c_i = y*yScale/height-yScale/2 + z_r = c_r + z_i = c_i + for i in range(16): + if z_r*z_r + z_i*z_i > 4: + break + new_z_r = (z_r*z_r)-(z_i*z_i) + c_r + z_i = 2*z_r*z_i + c_i + z_r = new_z_r + self.col(i) + self.row() + +if __name__ == "__main__": + with corecom_serial.CoreCom() as com: + exp = Mandelbrot(core=core.Core(com)) + exp.run()