Last active
January 5, 2016 11:12
-
-
Save justvanrossum/9ba02301ea5d151a8b61 to your computer and use it in GitHub Desktop.
DrawBot: A moving tribute to Ellsworth Kelly's "Seine" (1951).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# A moving tribute to Ellsworth Kelly's "Seine" (1951). | |
from random import seed # seed() allows us to get repeatable pseudo-noise | |
def expandGrid(pixels): | |
assert len(pixels) % 2 | |
mid = len(pixels) // 2 | |
midColumn = pixels[mid] | |
pixels.insert(mid + 1, list(midColumn)) | |
pixels.insert(mid + 0, list(midColumn)) | |
del pixels[0] | |
del pixels[-1] | |
def killPixels(pixels, howMany=0.3): | |
nPixelsX = len(pixels) | |
nPixelsY = len(pixels[0]) | |
mid = nPixelsX//2 | |
for i in range(nPixelsX): | |
if i == mid: | |
continue | |
dist = (abs(i-mid) / mid) | |
for k in range(int(round(dist*howMany*nPixelsY))): | |
j = randint(0, nPixelsY-1) | |
pixels[i][j] = 0 | |
canvasSize = 500 | |
nPixelsX = 35 # must be odd | |
nPixelsY = 45 | |
pixelX = canvasSize/nPixelsX | |
pixelY = canvasSize/nPixelsY | |
pixels = [[1 for i in range(nPixelsY)] for j in range(nPixelsX)] # create a grid of black pixels | |
nFrames = nPixelsX//2 | |
# prerun, to get the correct pixel state for the actual first frame | |
for frame in range(nFrames): | |
seed(frame) # restart the random number generator with the frame number | |
expandGrid(pixels) | |
killPixels(pixels) | |
for frame in range(nFrames): | |
seed(frame) # restart the random number generator with the frame number | |
newPage(canvasSize, canvasSize) | |
fill(219/255, 202/255, 174/255) | |
rect(0, 0, canvasSize, canvasSize) | |
fill(0) | |
stroke(0) | |
strokeWidth(0.7) | |
expandGrid(pixels) | |
killPixels(pixels) | |
for j in range(nPixelsY): | |
for i in range(nPixelsX): | |
x = i * pixelX | |
y = j * pixelY | |
if pixels[i][j]: | |
rect(x, y, pixelX, pixelY) | |
if nFrames > 20: | |
saveImage("EllsworthKellySeine" + ".gif") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment