# g.norefresh() def lerp(x,y,step): return x*(1.0-step)+y*step def drawPoly(points): for n in range(len(points)-1): g.line(points[n][0],points[n][1],points[n+1][0],points[n+1][1]) p1 = [[10,10],[50,50],[40,40],[10,10],[10,10]] p2 = [[60,30],[60,80],[80,80],[80,30],[60,30]] p3 = [[10,10],[50,50],[10,10]] p4 = [[80,30],[60,90],[80,80]] def lerpPoly(p1,p2,step): #for now, assume equal number of points p3 = [] for n in range(len(p1)): x = int(lerp(p1[n][0],p2[n][0],step)) y = int(lerp(p1[n][1],p2[n][1],step)) p3.append((x,y)) return p3 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]) g.pen(100) for n in range(0, 101, 7): drawPoly(lerpPoly(p3,p4,n/float(100))) 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 buf = copyRect(10,10,62,80) 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 for n in range(14): buf = blur(buf) buf = funkify(buf) g.paper(0) for n in range(0, 101, 10): g.refresh() g.paper(0) #time.sleep(0.04) blamRect(buf, 9, 9,-1) drawPoly(lerpPoly(p1,p2,n/float(100))) #drawPoly(lerpPoly(p3,p4,n/float(100))) drawPoly(p1)