Skip to content

Instantly share code, notes, and snippets.

@gto76
Created April 14, 2018 19:43
Show Gist options
  • Save gto76/b700291a54b8ad86da6bd6109cb18cb0 to your computer and use it in GitHub Desktop.
Save gto76/b700291a54b8ad86da6bd6109cb18cb0 to your computer and use it in GitHub Desktop.
Draws an ASCII mandelbrot set
#!/usr/bin/python3
#
# Usage: man.py
#
import numpy as np
import sys
ASCII_GREYSCALE = " .:-=+*#%@"
X = -1
Y = 0
ZOOM = 2
SIZE = 41
MAXITER = 10
def main():
x, y, zoom = X, Y, ZOOM
if len(sys.argv) > 3:
x = float(sys.argv[1])
y = float(sys.argv[2])
zoom = float(sys.argv[3])
a = mandelbrot_set(x-zoom, x+zoom, y-zoom, y+zoom, SIZE, SIZE, MAXITER)
b = a[2]
print_set(b)
def print_set(a_list):
for i, a_number in enumerate(a_list):
if i % SIZE == 0:
print()
a_char = get_char_ascii(a_number)
print(a_char+' ', end='')
print()
def get_char_ascii(a_number):
return ASCII_GREYSCALE[a_number-1]
def mandelbrot_set(xmin,xmax,ymin,ymax,width,height,maxiter):
r1 = np.linspace(xmin, xmax, width)
r2 = np.linspace(ymin, ymax, height)
return (r1,r2,[mandelbrot(complex(r, i),maxiter) for r in r1 for i in r2])
def mandelbrot(z,maxiter):
c = z
for n in range(maxiter):
if abs(z) > 2:
return n
z = z*z + c
return maxiter
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment