#
 
import math

g.norefresh()  
   
def blamRect(buf, x,y,alpha):
	#Should this scale also?
	if alpha < 0:
		#might speed this up
		for i in range(len(buf)):
			for j in range(len(buf[0])):
				g.setPixel(x+i,y+j,buf[i][j])
	else:
		for i in range(len(buf)):
			for j in range(len(buf[0])):
				if buf[i][j] != alpha:
					g.setPixel(x+i,y+j,buf[i][j])

def paint(x,y,val=0):
	g.setPixel(x,y,max(val,g.getPixel(x,y)+10))

def paintLine(x1,y1,x2,y2,val=0):
	dx = x2 - x1
	dy = y2 - y1
	numPoints = int(math.fabs(dx) + math.fabs(dy))
	for i in range(numPoints):
		px = x1 + dx*i/numPoints
		py = y1 + dy*i/numPoints
		paint(px,py,val)

def copyRect(x,y,w,h):
	buf = []
	for i in range(x,x+w):
		buf.append([])
		for j in range(y,y+h):
			buf[-1].append(g.getPixel(i,j))
	return buf

def blur(buf):
	for i in range(1,len(buf)-1):
		for j in range(1,len(buf[0])-1):
			buf[i][j] = (buf[i+1][j] + buf[i-1][j] + buf[i][j+1] + buf[i][j-1] + buf[i][j])/5 
	for i in range(1,len(buf)-1):
		buf[i][0] = (buf[i][0] + buf[i][1] + buf[i-1][0] + buf[i+1][0]) / 4
		buf[i][-1] = (buf[i][-1] + buf[i][-2] + buf[i-1][-1] + buf[i+1][-1]) / 4
	for j in range(1,len(buf[0])-1):
		buf[0][j] = (buf[0][j] + buf[1][j] + buf[0][j-1] + buf[0][j+1]) / 4
		buf[-1][j] = (buf[-1][j] + buf[-2][j] + buf[-1][j-1] + buf[-1][j+1]) / 4
	buf[0][0] = (buf[0][0] + buf[0][1] + buf[1][0]) /3
	buf[0][-1] = (buf[0][-1] + buf[1][-1] + buf[0][-2]) /3
	buf[-1][0] = (buf[-1][0] + buf[-1][1] + buf[-2][0]) /3
	buf[-1][-1] =  (buf[-1][-1] + buf[-2][-1] + buf[-1][-2]) /3
	return buf

def darken(buf, factor):
	for i in range(len(buf)):
		for j in range(len(buf[0])):
			buf[i][j] = int(buf[i][j]*factor)
	return buf 

def funkify(buf):
	for i in range(len(buf)):
		for j in range(len(buf[0])):
			buf[i][j] = buf[i][j]*buf[i][j]/85
	return buf

import time

while 1:
    g.paper(0)
    for i in range(70):
	x = 35
	y = 45
	dx = 55*math.cos((3+i)*2*3.14159265358979/222)
	dy = 55*math.sin((3+i)*2*3.14159265358979/225)
	paintLine(x,y,x+int(dx),y+int(dy))

    buf = copyRect(50,30,30,50)
    blur(buf)
    darken(buf,1.085125)
    darken(buf,1.785125)
    blur(buf)
    blur(buf)
    blur(buf)
    blamRect(buf, 50, 30, -1)
    time.sleep(3) 
    g.refresh()

    g.paper(0)
    for i in range(173):
	x = 35
	y = 45
	dx = 55*math.cos((3+i)*2*3.14159265358979/222)
	dy = 55*math.sin((3+i)*2*3.14159265358979/225)
	paintLine(x,y,x+int(dx),y+int(dy))

    buf = copyRect(50,30,30,50)
    blur(buf)
    darken(buf,1.085125)
    darken(buf,1.785125)
    blur(buf)
    blur(buf)
    blur(buf)
    blamRect(buf, 50, 30, -1)
    time.sleep(3)
    g.refresh()
 
    g.paper(0)
    for i in range(223):
	x = 35
	y = 45
	dx = 55*math.cos((3+i)*2*3.14159265358979/222)
	dy = 55*math.sin((3+i)*2*3.14159265358979/225)
	paintLine(x,y,x+int(dx),y+int(dy))

    buf = copyRect(50,30,30,50)
    blur(buf)
    darken(buf,1.085125)
    darken(buf,1.785125)
    blur(buf)
    blur(buf)
    blur(buf) 
    blamRect(buf, 50, 30, -1)
 
    g.refresh()