forked from M-Labs/nac3
add Mandelbrot example
This commit is contained in:
parent
4b8bbdc3dc
commit
93349206ed
50
examples/mandelbrot.py
Normal file
50
examples/mandelbrot.py
Normal file
@ -0,0 +1,50 @@
|
||||
import sys
|
||||
|
||||
from artiq.experiment import *
|
||||
|
||||
|
||||
class Mandelbrot(EnvExperiment):
|
||||
"""Mandelbrot set demo"""
|
||||
|
||||
def build(self):
|
||||
self.setattr_device("core")
|
||||
|
||||
@rpc(flags={"async"})
|
||||
def col(self, i):
|
||||
sys.stdout.write(" .,-:;i+hHM$*#@ "[i])
|
||||
|
||||
@rpc(flags={"async"})
|
||||
def row(self):
|
||||
print("")
|
||||
|
||||
@rpc(flags={"async"})
|
||||
def prt(self, x):
|
||||
print(x)
|
||||
|
||||
|
||||
# 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
|
||||
i = 0
|
||||
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()
|
Loading…
Reference in New Issue
Block a user