From 84e4986bacf5714e2ce70b7d856b727639d51964 Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Wed, 10 Oct 2018 21:15:33 +0100 Subject: [PATCH 01/16] Describe branch and add requirements of python3 in README.md --- README.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 529b84d..1ab2a8e 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,16 @@ Produce some nice-looking animations by composing scenes, just using some numpy arrays and the power of interpolation +*This branch was created to convert the source code to Python3*, the script can be broken, WIP. + ## Requirments: -- python2 -- aggdraw -- tkinter -- numpy + +``` +$ python3 -m venv venv +$ source venv/bin/activate +$ pip install -r requirements.txt +``` + ![morph.gif](https://github.com/sam46/Morph/blob/master/morph.gif) From a61101b3c983b3e3321e12f15a442579c9be44c6 Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Wed, 10 Oct 2018 21:17:23 +0100 Subject: [PATCH 02/16] Minor change in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1ab2a8e..5f2bd1d 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Produce some nice-looking animations by composing scenes, just using some numpy arrays and the power of interpolation -*This branch was created to convert the source code to Python3*, the script can be broken, WIP. +**This branch was created to convert the source code to Python3**, the script can be broken, WIP. ## Requirments: From 3519cafcfa99ca1b362ed35f75948317a85d4278 Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Thu, 11 Oct 2018 01:15:37 +0100 Subject: [PATCH 03/16] Fix TypeError: slice indices must be integers or None or have an __index__ method --- morph.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/morph.py b/morph.py index aa8d7b7..d3f8253 100644 --- a/morph.py +++ b/morph.py @@ -203,8 +203,8 @@ def swapDim(self,arr,d1,d2): def split(self, arr, dist, n): if n == 0: return np.array(arr) - lower = arr[:len(arr)/2, :] - (dist, 0) - upper = arr[len(arr)/2:, :] + (dist, 0) + lower = arr[:len(arr)//2, :] - (dist, 0) + upper = arr[len(arr)//2:, :] + (dist, 0) return np.vstack((self.split(lower, dist/2, n-1), self.split(upper, dist/2, n-1))) def rotate(self, arr, rot): From c9f0f5fa640f235b072d13ba26118acd2a4589d5 Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Thu, 11 Oct 2018 01:19:51 +0100 Subject: [PATCH 04/16] Replace deprecated itertools.cycle.next() with built-in next(itertools.cycle) --- morph.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/morph.py b/morph.py index d3f8253..841d178 100644 --- a/morph.py +++ b/morph.py @@ -104,7 +104,7 @@ def callback(event): self.transition() splits = itertools.cycle([0,1,2,3,4,5,4,3,2,1]) for th in np.arange(0,ntime+step,step): sinus = np.dstack((line[:,0], self.mapping(lambda t: amp*math.sin(period*2*pi*t/1000 - pi*th), line[:,0])))[0] - sinus = self.split(sinus, 35, splits.next()); + sinus = self.split(sinus, 35, next(splits)); self.targets.append(np.array(sinus)) for i in range(1,10): From 556f58c97983ffb0ace1d53917dc30bb1173d98a Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Thu, 11 Oct 2018 01:22:40 +0100 Subject: [PATCH 05/16] The arguments to the range constructor must be integers --- morph.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/morph.py b/morph.py index 841d178..2a56abd 100644 --- a/morph.py +++ b/morph.py @@ -138,13 +138,13 @@ def callback(event): self.transition() sphere.append(np.array([self.rotateY(vec, 4*pi/5) for vec in circleShuffle])) sphereReduced = [] # will contain 1001 vectors for i in range(1001): - if i in range(1,1001/5 + 1): + if i in range(1,1001//5 + 1): sphereReduced.append(np.array(sphere[0][i])) - elif i in range(1001/5 , 2*1001/5 + 1): + elif i in range(1001//5 , 2*1001//5 + 1): sphereReduced.append(np.array(sphere[1][i])) - elif i in range(2*1001/5 , 3*1001/5 + 1): + elif i in range(2*1001//5 , 3*1001//5 + 1): sphereReduced.append(np.array(sphere[2][i])) - elif i in range(3*1001/5 , 4*1001/5 + 1): + elif i in range(3*1001//5 , 4*1001//5 + 1): sphereReduced.append(np.array(sphere[3][i])) else: sphereReduced.append(np.array(sphere[4][i])) From e4b00617cef03b2e707250e82ede2c093d1625fb Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Thu, 11 Oct 2018 01:26:46 +0100 Subject: [PATCH 06/16] Use next() and get int from division --- morph.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/morph.py b/morph.py index 2a56abd..a3b8910 100644 --- a/morph.py +++ b/morph.py @@ -222,7 +222,7 @@ def interpolate(self, v1, v2, t): def transition(self): self.dt = 0 self.pts = self.newPts - self.target = self.cycle.next() + self.target = next(self.cycle) # self.targetFuzz = self.cycleFuzz.next() # map x in [a,b] to y in [c,d] @@ -235,7 +235,7 @@ def update(self): self.canvas.delete('all') self.photo = self.draw() self.canvas.create_image(0,0, image=self.photo, anchor="nw") - self.tk.after(1000/60, self.update) + self.tk.after(1000//60, self.update) def mapping(self, func, arr): vfunc = np.vectorize(func) From 4ea1ea0fae9cd0f07584b392b79c344cacc588ce Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Thu, 11 Oct 2018 01:33:34 +0100 Subject: [PATCH 07/16] [PEP8] Fix E261 --- morph.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/morph.py b/morph.py index a3b8910..11fbb99 100644 --- a/morph.py +++ b/morph.py @@ -50,8 +50,8 @@ def callback(event): self.transition() self.targets.append(circle) square = [] - sideL = 100 # half side length - _c_ = math.cos(pi/4)*rad # coordinates of point on the circle where x==y (1st quadrant) + sideL = 100 # half side length + _c_ = math.cos(pi/4)*rad # coordinates of point on the circle where x==y (1st quadrant) for p in circle: x, y = p ax, ay = abs(x), abs(y) @@ -98,9 +98,9 @@ def callback(event): self.transition() self.targets.append(line) amp = 100 - period = 1.5 # how many half period to display - ntime = 2 # reptitions - step = 0.1 # [0,1] + period = 1.5 # how many half period to display + ntime = 2 # reptitions + step = 0.1 # [0,1] splits = itertools.cycle([0,1,2,3,4,5,4,3,2,1]) for th in np.arange(0,ntime+step,step): sinus = np.dstack((line[:,0], self.mapping(lambda t: amp*math.sin(period*2*pi*t/1000 - pi*th), line[:,0])))[0] @@ -130,13 +130,13 @@ def callback(event): self.transition() circle = self.to3D(circle) circleShuffle = np.array(circle) np.random.shuffle(circleShuffle) - sphere = [] # will contain 5005 vectors + sphere = [] # will contain 5005 vectors sphere.append(np.array(circleShuffle)) sphere.append(np.array([self.rotateY(vec, pi/5) for vec in circleShuffle])) sphere.append(np.array([self.rotateY(vec, 2*pi/5) for vec in circleShuffle])) sphere.append(np.array([self.rotateY(vec, 3*pi/5) for vec in circleShuffle])) sphere.append(np.array([self.rotateY(vec, 4*pi/5) for vec in circleShuffle])) - sphereReduced = [] # will contain 1001 vectors + sphereReduced = [] # will contain 1001 vectors for i in range(1001): if i in range(1,1001//5 + 1): sphereReduced.append(np.array(sphere[0][i])) @@ -278,7 +278,7 @@ def draw(self): self.colVec, self.colVecFin = self.colVecFin, self.colVec self.brush = aggdraw.Brush((int(round(colCur[0])),int(round(colCur[1])), int(round(colCur[2])))) - speed = 0.1 # interpolation speed. in range [0,1] + speed = 0.1 # interpolation speed. in range [0,1] img = Image.new('RGBA', self.size, "black") ctx = aggdraw.Draw(img) ctx.settransform((self.size[0]/2, self.size[1]/2)) From 5a475a6e14fba5c2b6c39306d6798304d78a07ca Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Thu, 11 Oct 2018 01:34:31 +0100 Subject: [PATCH 08/16] [PEP8] Fix E231 --- morph.py | 240 +++++++++++++++++++++++++++---------------------------- 1 file changed, 120 insertions(+), 120 deletions(-) diff --git a/morph.py b/morph.py index 11fbb99..ee3934d 100644 --- a/morph.py +++ b/morph.py @@ -1,7 +1,7 @@ import aggdraw import tkinter import math -from PIL import Image, ImageTk +from PIL import Image, ImageTk from math import pi import numpy as np import itertools @@ -10,27 +10,27 @@ class App(): def __init__(self): self.tk = tkinter.Tk() - self.canvas = tkinter.Canvas(width=800, height=600) + self.canvas = tkinter.Canvas(width=800, height=600) self.canvas.pack() def callback(event): self.transition() - self.canvas.bind("", callback) - self.size = 800, 600 - width, height = self.size + self.canvas.bind("", callback) + self.size = 800, 600 + width, height = self.size # color lerping: - self.colVec = np.array([255,0,0]) - self.colVecFin = np.array([0,0,255]) + self.colVec = np.array([255, 0, 0]) + self.colVecFin = np.array([0, 0, 255]) self.dcol = 0.0 - self.brush = aggdraw.Brush((self.colVec[0], self.colVec[1], self.colVec[2])) - # self.pen = aggdraw.Pen((255,0,0)) + self.brush = aggdraw.Brush((self.colVec[0], self.colVec[1], self.colVec[2])) + # self.pen = aggdraw.Pen((255, 0, 0)) - self.std = np.arange(0, 1.001, 0.001) - randPts = np.random.rand(1001,2)*2*self.size - self.size + self.std = np.arange(0, 1.001, 0.001) + randPts = np.random.rand(1001, 2)*2*self.size - self.size self.pts = randPts - self.targets, self.targetsFuzz = [], [] + self.targets, self.targetsFuzz = [], [] self.dt = 0.0 self.newPts = np.array(self.pts) - line = np.dstack((self.std*width/2 - width/4, np.zeros(1001)))[0] + line = np.dstack((self.std*width/2 - width/4, np.zeros(1001)))[0] self.targets.append(line) self.targets.append(line) self.targets.append(line) @@ -38,13 +38,13 @@ def callback(event): self.transition() self.targets.append(line) rad = 100 - twopi = self.mapping(lambda x: pi*2*x, self.std) - xs = self.mapping(lambda t: math.cos(pi*2*t)*rad, self.std) - ys = self.mapping(lambda t: math.sin(pi*2*t)*rad, self.std) - circle = np.dstack((xs, ys))[0] - self.targets.append(self.interpolate(line,circle,0.25)) - self.targets.append(self.interpolate(line,circle,0.5)) - self.targets.append(self.interpolate(line,circle,0.75)) + twopi = self.mapping(lambda x: pi*2*x, self.std) + xs = self.mapping(lambda t: math.cos(pi*2*t)*rad, self.std) + ys = self.mapping(lambda t: math.sin(pi*2*t)*rad, self.std) + circle = np.dstack((xs, ys))[0] + self.targets.append(self.interpolate(line, circle, 0.25)) + self.targets.append(self.interpolate(line, circle, 0.5)) + self.targets.append(self.interpolate(line, circle, 0.75)) self.targets.append(circle) self.targets.append(circle) self.targets.append(circle) @@ -53,65 +53,65 @@ def callback(event): self.transition() sideL = 100 # half side length _c_ = math.cos(pi/4)*rad # coordinates of point on the circle where x==y (1st quadrant) for p in circle: - x, y = p - ax, ay = abs(x), abs(y) + x, y = p + ax, ay = abs(x), abs(y) if ax < ay: - fx = self.lerp(-_c_,_c_,-sideL,sideL,ax)*np.sign(x) + fx = self.lerp(-_c_, _c_, -sideL, sideL, ax)*np.sign(x) fy = sideL*np.sign(y) else: - fy = self.lerp(-_c_,_c_,-sideL,sideL,ay)*np.sign(y) + fy = self.lerp(-_c_, _c_, -sideL, sideL, ay)*np.sign(y) fx = sideL*np.sign(x) - square.append([fx,fy]) - self.targets.append(self.rotate(np.array(square), pi/4)) - self.targets.append(self.rotate(np.array(square), pi/4)) - self.targets.append(self.rotate(np.array(square), pi/4)) - self.targets.append(self.interpolate(circle, self.rotate(np.array(square), pi/4), 1.6)) - self.targets.append(self.interpolate(circle, self.rotate(np.array(square), pi/4), 1.6)) - self.targets.append(self.interpolate(circle, self.rotate(np.array(square), pi/4), 1.6)) - self.targets.append(self.fuzzify(self.rotate(np.array(square), pi/4), 3,13)) - self.targets.append(self.fuzzify(self.rotate(np.array(square), pi/4), 3,13)) - self.targets.append(self.fuzzify(self.rotate(np.array(square), pi/4), 3,13)) + square.append([fx, fy]) + self.targets.append(self.rotate(np.array(square), pi/4)) + self.targets.append(self.rotate(np.array(square), pi/4)) + self.targets.append(self.rotate(np.array(square), pi/4)) + self.targets.append(self.interpolate(circle, self.rotate(np.array(square), pi/4), 1.6)) + self.targets.append(self.interpolate(circle, self.rotate(np.array(square), pi/4), 1.6)) + self.targets.append(self.interpolate(circle, self.rotate(np.array(square), pi/4), 1.6)) + self.targets.append(self.fuzzify(self.rotate(np.array(square), pi/4), 3, 13)) + self.targets.append(self.fuzzify(self.rotate(np.array(square), pi/4), 3, 13)) + self.targets.append(self.fuzzify(self.rotate(np.array(square), pi/4), 3, 13)) # square2 = [] # sideL = 70 # for p in circle: - # x, y = p - # ax, ay = abs(x), abs(y) + # x, y = p + # ax, ay = abs(x), abs(y) # if ax < ay: - # fx = self.lerp(-_c_,_c_,-sideL,sideL,ax)*np.sign(x) + # fx = self.lerp(-_c_, _c_, -sideL, sideL, ax)*np.sign(x) # fy = sideL*np.sign(y) # else: - # fy = self.lerp(-_c_,_c_,-sideL,sideL,ay)*np.sign(y) + # fy = self.lerp(-_c_, _c_, -sideL, sideL, ay)*np.sign(y) # fx = sideL*np.sign(x) - # square2.append([fx,fy]) - # self.targets.append(self.split(self.rotate(np.array(square2), pi/4), 50,5)) - # self.targets.append(self.split(self.rotate(np.array(square2), pi/4), 50,5)) + # square2.append([fx, fy]) + # self.targets.append(self.split(self.rotate(np.array(square2), pi/4), 50, 5)) + # self.targets.append(self.split(self.rotate(np.array(square2), pi/4), 50, 5)) self.targets.append(circle*0.01) self.targets.append(circle*0.01) self.targets.append(circle*0.01) self.targets.append(circle*0.01) - self.targets.append(self.split(line,50,5)) - self.targets.append(self.split(line,50,5)) + self.targets.append(self.split(line, 50, 5)) + self.targets.append(self.split(line, 50, 5)) self.targets.append(line) self.targets.append(line) amp = 100 period = 1.5 # how many half period to display ntime = 2 # reptitions - step = 0.1 # [0,1] - splits = itertools.cycle([0,1,2,3,4,5,4,3,2,1]) - for th in np.arange(0,ntime+step,step): - sinus = np.dstack((line[:,0], self.mapping(lambda t: amp*math.sin(period*2*pi*t/1000 - pi*th), line[:,0])))[0] - sinus = self.split(sinus, 35, next(splits)); + step = 0.1 # [0, 1] + splits = itertools.cycle([0, 1, 2, 3, 4, 5, 4, 3, 2, 1]) + for th in np.arange(0, ntime+step, step): + sinus = np.dstack((line[:, 0], self.mapping(lambda t: amp*math.sin(period*2*pi*t/1000 - pi*th), line[:, 0])))[0] + sinus = self.split(sinus, 35, next(splits)); self.targets.append(np.array(sinus)) - for i in range(1,10): - self.targets.append(self.interpolate(line,circle,i*0.1)) - self.targets.append(self.fuzzify(circle,1,1)) - self.targets.append(self.fuzzify(circle,2,5)) - self.targets.append(self.fuzzify(circle,3,10)) + for i in range(1, 10): + self.targets.append(self.interpolate(line, circle, i*0.1)) + self.targets.append(self.fuzzify(circle, 1, 1)) + self.targets.append(self.fuzzify(circle, 2, 5)) + self.targets.append(self.fuzzify(circle, 3, 10)) self.targets.append(circle) self.targets.append(randPts) @@ -132,52 +132,52 @@ def callback(event): self.transition() np.random.shuffle(circleShuffle) sphere = [] # will contain 5005 vectors sphere.append(np.array(circleShuffle)) - sphere.append(np.array([self.rotateY(vec, pi/5) for vec in circleShuffle])) - sphere.append(np.array([self.rotateY(vec, 2*pi/5) for vec in circleShuffle])) - sphere.append(np.array([self.rotateY(vec, 3*pi/5) for vec in circleShuffle])) - sphere.append(np.array([self.rotateY(vec, 4*pi/5) for vec in circleShuffle])) + sphere.append(np.array([self.rotateY(vec, pi/5) for vec in circleShuffle])) + sphere.append(np.array([self.rotateY(vec, 2*pi/5) for vec in circleShuffle])) + sphere.append(np.array([self.rotateY(vec, 3*pi/5) for vec in circleShuffle])) + sphere.append(np.array([self.rotateY(vec, 4*pi/5) for vec in circleShuffle])) sphereReduced = [] # will contain 1001 vectors for i in range(1001): - if i in range(1,1001//5 + 1): + if i in range(1, 1001//5 + 1): sphereReduced.append(np.array(sphere[0][i])) - elif i in range(1001//5 , 2*1001//5 + 1): + elif i in range(1001//5 , 2*1001//5 + 1): sphereReduced.append(np.array(sphere[1][i])) - elif i in range(2*1001//5 , 3*1001//5 + 1): + elif i in range(2*1001//5 , 3*1001//5 + 1): sphereReduced.append(np.array(sphere[2][i])) - elif i in range(3*1001//5 , 4*1001//5 + 1): + elif i in range(3*1001//5 , 4*1001//5 + 1): sphereReduced.append(np.array(sphere[3][i])) else: sphereReduced.append(np.array(sphere[4][i])) - print(np.arange(0.1, pi, 0.1)) + print(np.arange(0.1, pi, 0.1)) th = 1.57 - sphereInit = np.array([self.rotateX(self.rotateY(vec, th), th) for vec in sphereReduced]) + sphereInit = np.array([self.rotateX(self.rotateY(vec, th), th) for vec in sphereReduced]) self.targets.append(sphereInit) self.targets.append(sphereInit) self.targets.append(sphereInit) - for th in np.arange(0.1, pi, 0.1): + for th in np.arange(0.1, pi, 0.1): if random() < 0.4 or th-3.1<0.000001: - self.targets.append(self.fuzzify(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]), 10,10,10) *self.lerp(0.1,3.1,1,2.3,th)) + self.targets.append(self.fuzzify(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]), 10, 10, 10) *self.lerp(0.1, 3.1, 1, 2.3, th)) else: - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]) *self.lerp(0.1,3.1,1,2.3,th)) - # self.targets.append(self.swapDim(np.array([self.rotateY(vec, pi/th) for vec in circle]), 1,2)) + self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]) *self.lerp(0.1, 3.1, 1, 2.3, th)) + # self.targets.append(self.swapDim(np.array([self.rotateY(vec, pi/th) for vec in circle]), 1, 2)) self.targets.append(np.array(self.targets[-1])) self.targets.append(np.array(self.targets[-1])) self.targets.append(np.array(self.targets[-1])) self.targets.append(np.array(self.targets[-1])) th = 3.15 - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]) *1.3) - self.targets.append(self.fuzzify(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]), 10,10,10) *1.3) - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]) *1.3) + self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]) *1.3) + self.targets.append(self.fuzzify(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]), 10, 10, 10) *1.3) + self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]) *1.3) prevState = np.array(self.targets[-1]) th = -1.57 - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) *1.3) - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) *1.3) - self.targets.append(self.fuzzify(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]), 10,10,10) *1.3) - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) *1.3) - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) *1.3) + self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) *1.3) + self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) *1.3) + self.targets.append(self.fuzzify(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]), 10, 10, 10) *1.3) + self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) *1.3) + self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) *1.3) self.cycle = itertools.cycle(self.targets) @@ -186,32 +186,32 @@ def callback(event): self.transition() self.targetFuzz = self.pts - def to3D(self, vec): - return np.hstack((vec, [[0] for i in range(len(vec))] )) + def to3D(self, vec): + return np.hstack((vec, [[0] for i in range(len(vec))] )) - def fuzzify(self, arr, xamp, yamp, zamp=None): - if zamp is None: return np.array([i+ (xamp*random(), yamp*random()) for i in arr]) - return np.array([i+ (xamp*random(), yamp*random(), zamp*random()) for i in arr]) + def fuzzify(self, arr, xamp, yamp, zamp=None): + if zamp is None: return np.array([i+ (xamp*random(), yamp*random()) for i in arr]) + return np.array([i+ (xamp*random(), yamp*random(), zamp*random()) for i in arr]) - def swapDim(self,arr,d1,d2): + def swapDim(self, arr, d1, d2): ret = [] for v in arr: temp = list(v) - temp[d1], temp[d2] = temp[d2], temp[d1] + temp[d1], temp[d2] = temp[d2], temp[d1] ret.append(np.array(temp)) return np.array(ret) - def split(self, arr, dist, n): + def split(self, arr, dist, n): if n == 0: return np.array(arr) - lower = arr[:len(arr)//2, :] - (dist, 0) - upper = arr[len(arr)//2:, :] + (dist, 0) - return np.vstack((self.split(lower, dist/2, n-1), self.split(upper, dist/2, n-1))) + lower = arr[:len(arr)//2, :] - (dist, 0) + upper = arr[len(arr)//2:, :] + (dist, 0) + return np.vstack((self.split(lower, dist/2, n-1), self.split(upper, dist/2, n-1))) - def rotate(self, arr, rot): - matRot = np.array([[math.cos(rot), -math.sin(rot)], [math.sin(rot), math.cos(rot)]]) + def rotate(self, arr, rot): + matRot = np.array([[math.cos(rot), -math.sin(rot)], [math.sin(rot), math.cos(rot)]]) return np.array([matRot.dot(v) for v in arr]) - def interpolate(self, v1, v2, t): + def interpolate(self, v1, v2, t): if v1.shape != v2.shape: if v1.shape[1] == 2: v1 = self.to3D(v1) @@ -225,8 +225,8 @@ def transition(self): self.target = next(self.cycle) # self.targetFuzz = self.cycleFuzz.next() - # map x in [a,b] to y in [c,d] - def lerp(seld, a,b,c,d,x): + # map x in [a, b] to y in [c, d] + def lerp(seld, a, b, c, d, x): m = (c-d)/(a-b) p = c - m*a return m*x + p @@ -234,58 +234,58 @@ def lerp(seld, a,b,c,d,x): def update(self): self.canvas.delete('all') self.photo = self.draw() - self.canvas.create_image(0,0, image=self.photo, anchor="nw") - self.tk.after(1000//60, self.update) + self.canvas.create_image(0, 0, image=self.photo, anchor="nw") + self.tk.after(1000//60, self.update) - def mapping(self, func, arr): + def mapping(self, func, arr): vfunc = np.vectorize(func) return vfunc(arr) - def rotateX(self, vec, th): + def rotateX(self, vec, th): y = math.cos(th)*vec[1] - math.sin(th)*vec[2]; z = math.sin(th)*vec[1] + math.cos(th)*vec[2]; - return np.array([vec[0], y, z]); + return np.array([vec[0], y, z]); - def rotateY(self, vec, th): + def rotateY(self, vec, th): x = math.cos(th)*vec[0] - math.sin(th)*vec[2]; z = math.sin(th)*vec[0] + math.cos(th)*vec[2]; - return np.array([x, vec[1], z]); + return np.array([x, vec[1], z]); - def rotateZ(self, vec, th): + def rotateZ(self, vec, th): y = math.cos(th)*vec[1] - math.sin(th)*vec[0]; x = math.sin(th)*vec[1] + math.cos(th)*vec[0]; - return np.array([x, y, vec[2]]); - - def bezier(self, ctx, p0, p1, p2, p3): - ax, ay = p0 - bx, by = p1 - cx, cy = p2 - dx, dy = p3 - pathstring = " m{:f},{:f} c{:f},{:f},{:f},{:f},{:f},{:f}".format(ax,ay,bx,by,cx,cy,dx,dy) + return np.array([x, y, vec[2]]); + + def bezier(self, ctx, p0, p1, p2, p3): + ax, ay = p0 + bx, by = p1 + cx, cy = p2 + dx, dy = p3 + pathstring = " m{:f}, {:f} c{:f}, {:f}, {:f}, {:f}, {:f}, {:f}".format(ax, ay, bx, by, cx, cy, dx, dy) symbol = aggdraw.Symbol(pathstring) - ctx.symbol((0,0),symbol, aggdraw.Pen((255,0,0))) + ctx.symbol((0, 0), symbol, aggdraw.Pen((255, 0, 0))) - def drawArr(self, ctx, arr): + def drawArr(self, ctx, arr): for v in arr: - x,y = v[:2] - ctx.ellipse((x+1, y+1, x, y), self.brush) + x, y = v[:2] + ctx.ellipse((x+1, y+1, x, y), self.brush) def draw(self): self.dcol += 0.0006 - colCur = self.interpolate(self.colVec, self.colVecFin, self.dcol) + colCur = self.interpolate(self.colVec, self.colVecFin, self.dcol) if 1.0-self.dcol < 0.0000001: self.dcol = 0.0 - self.colVec, self.colVecFin = self.colVecFin, self.colVec - self.brush = aggdraw.Brush((int(round(colCur[0])),int(round(colCur[1])), int(round(colCur[2])))) + self.colVec, self.colVecFin = self.colVecFin, self.colVec + self.brush = aggdraw.Brush((int(round(colCur[0])), int(round(colCur[1])), int(round(colCur[2])))) - speed = 0.1 # interpolation speed. in range [0,1] - img = Image.new('RGBA', self.size, "black") + speed = 0.1 # interpolation speed. in range [0, 1] + img = Image.new('RGBA', self.size, "black") ctx = aggdraw.Draw(img) - ctx.settransform((self.size[0]/2, self.size[1]/2)) + ctx.settransform((self.size[0]/2, self.size[1]/2)) - self.newPts = self.interpolate(self.pts, self.target, self.dt) - self.dt = min(self.dt+speed, 1.0) - self.drawArr(ctx, self.newPts) + self.newPts = self.interpolate(self.pts, self.target, self.dt) + self.dt = min(self.dt+speed, 1.0) + self.drawArr(ctx, self.newPts) if 1.0-self.dt < 0.0000001: self.transition() self.dt += speed From bf729963900b86bf2dbb13cbf432ab10b114b92c Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Thu, 11 Oct 2018 01:36:12 +0100 Subject: [PATCH 09/16] [PEP8] Fix E203 --- morph.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/morph.py b/morph.py index ee3934d..e739e80 100644 --- a/morph.py +++ b/morph.py @@ -140,11 +140,11 @@ def callback(event): self.transition() for i in range(1001): if i in range(1, 1001//5 + 1): sphereReduced.append(np.array(sphere[0][i])) - elif i in range(1001//5 , 2*1001//5 + 1): + elif i in range(1001//5, 2*1001//5 + 1): sphereReduced.append(np.array(sphere[1][i])) - elif i in range(2*1001//5 , 3*1001//5 + 1): + elif i in range(2*1001//5, 3*1001//5 + 1): sphereReduced.append(np.array(sphere[2][i])) - elif i in range(3*1001//5 , 4*1001//5 + 1): + elif i in range(3*1001//5, 4*1001//5 + 1): sphereReduced.append(np.array(sphere[3][i])) else: sphereReduced.append(np.array(sphere[4][i])) @@ -203,8 +203,8 @@ def swapDim(self, arr, d1, d2): def split(self, arr, dist, n): if n == 0: return np.array(arr) - lower = arr[:len(arr)//2, :] - (dist, 0) - upper = arr[len(arr)//2:, :] + (dist, 0) + lower = arr[:len(arr)//2, :] - (dist, 0) + upper = arr[len(arr)//2:, :] + (dist, 0) return np.vstack((self.split(lower, dist/2, n-1), self.split(upper, dist/2, n-1))) def rotate(self, arr, rot): From be3b253e8874ee6c9cb2d530d8144fc430d1a959 Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Thu, 11 Oct 2018 01:39:54 +0100 Subject: [PATCH 10/16] [PEP8] Fix E225 --- morph.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/morph.py b/morph.py index e739e80..434ffcf 100644 --- a/morph.py +++ b/morph.py @@ -157,10 +157,10 @@ def callback(event): self.transition() self.targets.append(sphereInit) for th in np.arange(0.1, pi, 0.1): - if random() < 0.4 or th-3.1<0.000001: - self.targets.append(self.fuzzify(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]), 10, 10, 10) *self.lerp(0.1, 3.1, 1, 2.3, th)) + if random() < 0.4 or th-3.1 < 0.000001: + self.targets.append(self.fuzzify(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]), 10, 10, 10) * self.lerp(0.1, 3.1, 1, 2.3, th)) else: - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]) *self.lerp(0.1, 3.1, 1, 2.3, th)) + self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]) * self.lerp(0.1, 3.1, 1, 2.3, th)) # self.targets.append(self.swapDim(np.array([self.rotateY(vec, pi/th) for vec in circle]), 1, 2)) self.targets.append(np.array(self.targets[-1])) self.targets.append(np.array(self.targets[-1])) @@ -168,16 +168,16 @@ def callback(event): self.transition() self.targets.append(np.array(self.targets[-1])) th = 3.15 - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]) *1.3) - self.targets.append(self.fuzzify(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]), 10, 10, 10) *1.3) - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]) *1.3) + self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]) * 1.3) + self.targets.append(self.fuzzify(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]), 10, 10, 10) * 1.3) + self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]) * 1.3) prevState = np.array(self.targets[-1]) th = -1.57 - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) *1.3) - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) *1.3) - self.targets.append(self.fuzzify(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]), 10, 10, 10) *1.3) - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) *1.3) - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) *1.3) + self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) * 1.3) + self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) * 1.3) + self.targets.append(self.fuzzify(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]), 10, 10, 10) * 1.3) + self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) * 1.3) + self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) * 1.3) self.cycle = itertools.cycle(self.targets) @@ -190,8 +190,8 @@ def to3D(self, vec): return np.hstack((vec, [[0] for i in range(len(vec))] )) def fuzzify(self, arr, xamp, yamp, zamp=None): - if zamp is None: return np.array([i+ (xamp*random(), yamp*random()) for i in arr]) - return np.array([i+ (xamp*random(), yamp*random(), zamp*random()) for i in arr]) + if zamp is None: return np.array([i + (xamp * random(), yamp * random()) for i in arr]) + return np.array([i + (xamp * random(), yamp * random(), zamp * random()) for i in arr]) def swapDim(self, arr, d1, d2): ret = [] From bc9be07ddc6f6e79c0dfd37db1f04baa9c338278 Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Thu, 11 Oct 2018 01:43:26 +0100 Subject: [PATCH 11/16] [PEP8] Fix E703 --- morph.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/morph.py b/morph.py index 434ffcf..b864a02 100644 --- a/morph.py +++ b/morph.py @@ -104,7 +104,7 @@ def callback(event): self.transition() splits = itertools.cycle([0, 1, 2, 3, 4, 5, 4, 3, 2, 1]) for th in np.arange(0, ntime+step, step): sinus = np.dstack((line[:, 0], self.mapping(lambda t: amp*math.sin(period*2*pi*t/1000 - pi*th), line[:, 0])))[0] - sinus = self.split(sinus, 35, next(splits)); + sinus = self.split(sinus, 35, next(splits)) self.targets.append(np.array(sinus)) for i in range(1, 10): @@ -242,19 +242,19 @@ def mapping(self, func, arr): return vfunc(arr) def rotateX(self, vec, th): - y = math.cos(th)*vec[1] - math.sin(th)*vec[2]; - z = math.sin(th)*vec[1] + math.cos(th)*vec[2]; - return np.array([vec[0], y, z]); + y = math.cos(th)*vec[1] - math.sin(th)*vec[2] + z = math.sin(th)*vec[1] + math.cos(th)*vec[2] + return np.array([vec[0], y, z]) def rotateY(self, vec, th): - x = math.cos(th)*vec[0] - math.sin(th)*vec[2]; - z = math.sin(th)*vec[0] + math.cos(th)*vec[2]; - return np.array([x, vec[1], z]); + x = math.cos(th)*vec[0] - math.sin(th)*vec[2] + z = math.sin(th)*vec[0] + math.cos(th)*vec[2] + return np.array([x, vec[1], z]) def rotateZ(self, vec, th): - y = math.cos(th)*vec[1] - math.sin(th)*vec[0]; - x = math.sin(th)*vec[1] + math.cos(th)*vec[0]; - return np.array([x, y, vec[2]]); + y = math.cos(th)*vec[1] - math.sin(th)*vec[0] + x = math.sin(th)*vec[1] + math.cos(th)*vec[0] + return np.array([x, y, vec[2]]) def bezier(self, ctx, p0, p1, p2, p3): ax, ay = p0 From 723ca29a2acf4c1d58353158fa877a4265598d16 Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Thu, 11 Oct 2018 01:45:11 +0100 Subject: [PATCH 12/16] [PEP8] Fix E266 & E202 --- morph.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/morph.py b/morph.py index b864a02..3ffe6d2 100644 --- a/morph.py +++ b/morph.py @@ -126,7 +126,7 @@ def callback(event): self.transition() self.targets.append(circle*0.01) self.targets.append(circle*0.01) - #### 3d scences: + # 3d scences: circle = self.to3D(circle) circleShuffle = np.array(circle) np.random.shuffle(circleShuffle) @@ -187,7 +187,7 @@ def callback(event): self.transition() def to3D(self, vec): - return np.hstack((vec, [[0] for i in range(len(vec))] )) + return np.hstack((vec, [[0] for i in range(len(vec))])) def fuzzify(self, arr, xamp, yamp, zamp=None): if zamp is None: return np.array([i + (xamp * random(), yamp * random()) for i in arr]) From 7534e1322107b90d35802748484d7e37293de16b Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Thu, 11 Oct 2018 01:47:03 +0100 Subject: [PATCH 13/16] [PEP8] Fix E30{1..3} --- morph.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/morph.py b/morph.py index 3ffe6d2..2978fc6 100644 --- a/morph.py +++ b/morph.py @@ -7,12 +7,14 @@ import itertools from random import random + class App(): def __init__(self): self.tk = tkinter.Tk() self.canvas = tkinter.Canvas(width=800, height=600) self.canvas.pack() - def callback(event): self.transition() + + def callback(event): self.transition() self.canvas.bind("", callback) self.size = 800, 600 width, height = self.size @@ -179,13 +181,11 @@ def callback(event): self.transition() self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) * 1.3) self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) * 1.3) - self.cycle = itertools.cycle(self.targets) self.cycleFuzz = itertools.cycle(self.targetsFuzz) self.target = self.pts self.targetFuzz = self.pts - def to3D(self, vec): return np.hstack((vec, [[0] for i in range(len(vec))])) @@ -218,7 +218,6 @@ def interpolate(self, v1, v2, t): else: v2 = self.to3D(v2) return np.array(v1 + (v2-v1)*t) - def transition(self): self.dt = 0 self.pts = self.newPts From 0e2284b56a642e70de71ec4b8e5f8080e8157d11 Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Thu, 11 Oct 2018 01:49:57 +0100 Subject: [PATCH 14/16] [PEP8] Fix E701 --- morph.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/morph.py b/morph.py index 2978fc6..06fea08 100644 --- a/morph.py +++ b/morph.py @@ -14,7 +14,8 @@ def __init__(self): self.canvas = tkinter.Canvas(width=800, height=600) self.canvas.pack() - def callback(event): self.transition() + def callback(event): + self.transition() self.canvas.bind("", callback) self.size = 800, 600 width, height = self.size @@ -190,7 +191,8 @@ def to3D(self, vec): return np.hstack((vec, [[0] for i in range(len(vec))])) def fuzzify(self, arr, xamp, yamp, zamp=None): - if zamp is None: return np.array([i + (xamp * random(), yamp * random()) for i in arr]) + if zamp is None: + return np.array([i + (xamp * random(), yamp * random()) for i in arr]) return np.array([i + (xamp * random(), yamp * random(), zamp * random()) for i in arr]) def swapDim(self, arr, d1, d2): @@ -202,7 +204,8 @@ def swapDim(self, arr, d1, d2): return np.array(ret) def split(self, arr, dist, n): - if n == 0: return np.array(arr) + if n == 0: + return np.array(arr) lower = arr[:len(arr)//2, :] - (dist, 0) upper = arr[len(arr)//2:, :] + (dist, 0) return np.vstack((self.split(lower, dist/2, n-1), self.split(upper, dist/2, n-1))) @@ -215,7 +218,8 @@ def interpolate(self, v1, v2, t): if v1.shape != v2.shape: if v1.shape[1] == 2: v1 = self.to3D(v1) - else: v2 = self.to3D(v2) + else: + v2 = self.to3D(v2) return np.array(v1 + (v2-v1)*t) def transition(self): From 429a5e81e275da11b0b7bcd229225a979fffe778 Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Thu, 11 Oct 2018 02:22:13 +0100 Subject: [PATCH 15/16] [PEP8] Fix E501 --- morph.py | 133 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 98 insertions(+), 35 deletions(-) diff --git a/morph.py b/morph.py index 06fea08..526091e 100644 --- a/morph.py +++ b/morph.py @@ -14,8 +14,9 @@ def __init__(self): self.canvas = tkinter.Canvas(width=800, height=600) self.canvas.pack() - def callback(event): - self.transition() + def callback(event): + self.transition() + self.canvas.bind("", callback) self.size = 800, 600 width, height = self.size @@ -23,7 +24,9 @@ def callback(event): self.colVec = np.array([255, 0, 0]) self.colVecFin = np.array([0, 0, 255]) self.dcol = 0.0 - self.brush = aggdraw.Brush((self.colVec[0], self.colVec[1], self.colVec[2])) + self.brush = aggdraw.Brush( + (self.colVec[0], self.colVec[1], self.colVec[2]) + ) # self.pen = aggdraw.Pen((255, 0, 0)) self.std = np.arange(0, 1.001, 0.001) @@ -54,7 +57,8 @@ def callback(event): square = [] sideL = 100 # half side length - _c_ = math.cos(pi/4)*rad # coordinates of point on the circle where x==y (1st quadrant) + # coordinates of point on the circle where x==y (1st quadrant) + _c_ = math.cos(pi/4)*rad for p in circle: x, y = p ax, ay = abs(x), abs(y) @@ -68,12 +72,24 @@ def callback(event): self.targets.append(self.rotate(np.array(square), pi/4)) self.targets.append(self.rotate(np.array(square), pi/4)) self.targets.append(self.rotate(np.array(square), pi/4)) - self.targets.append(self.interpolate(circle, self.rotate(np.array(square), pi/4), 1.6)) - self.targets.append(self.interpolate(circle, self.rotate(np.array(square), pi/4), 1.6)) - self.targets.append(self.interpolate(circle, self.rotate(np.array(square), pi/4), 1.6)) - self.targets.append(self.fuzzify(self.rotate(np.array(square), pi/4), 3, 13)) - self.targets.append(self.fuzzify(self.rotate(np.array(square), pi/4), 3, 13)) - self.targets.append(self.fuzzify(self.rotate(np.array(square), pi/4), 3, 13)) + self.targets.append(self.interpolate( + circle, self.rotate(np.array(square), pi/4), 1.6 + )) + self.targets.append(self.interpolate( + circle, self.rotate(np.array(square), pi/4), 1.6 + )) + self.targets.append(self.interpolate( + circle, self.rotate(np.array(square), pi/4), 1.6 + )) + self.targets.append(self.fuzzify( + self.rotate(np.array(square), pi/4), 3, 13 + )) + self.targets.append(self.fuzzify( + self.rotate(np.array(square), pi/4), 3, 13 + )) + self.targets.append(self.fuzzify( + self.rotate(np.array(square), pi/4), 3, 13 + )) # square2 = [] # sideL = 70 @@ -87,8 +103,12 @@ def callback(event): # fy = self.lerp(-_c_, _c_, -sideL, sideL, ay)*np.sign(y) # fx = sideL*np.sign(x) # square2.append([fx, fy]) - # self.targets.append(self.split(self.rotate(np.array(square2), pi/4), 50, 5)) - # self.targets.append(self.split(self.rotate(np.array(square2), pi/4), 50, 5)) + # self.targets.append(self.split( + # self.rotate(np.array(square2), pi/4), 50, 5 + # )) + # self.targets.append(self.split( + # self.rotate(np.array(square2), pi/4), 50, 5 + # )) self.targets.append(circle*0.01) self.targets.append(circle*0.01) @@ -106,7 +126,9 @@ def callback(event): step = 0.1 # [0, 1] splits = itertools.cycle([0, 1, 2, 3, 4, 5, 4, 3, 2, 1]) for th in np.arange(0, ntime+step, step): - sinus = np.dstack((line[:, 0], self.mapping(lambda t: amp*math.sin(period*2*pi*t/1000 - pi*th), line[:, 0])))[0] + sinus = np.dstack((line[:, 0], self.mapping( + lambda t: amp*math.sin(period*2*pi*t/1000 - pi*th), line[:, 0] + )))[0] sinus = self.split(sinus, 35, next(splits)) self.targets.append(np.array(sinus)) @@ -135,10 +157,18 @@ def callback(event): np.random.shuffle(circleShuffle) sphere = [] # will contain 5005 vectors sphere.append(np.array(circleShuffle)) - sphere.append(np.array([self.rotateY(vec, pi/5) for vec in circleShuffle])) - sphere.append(np.array([self.rotateY(vec, 2*pi/5) for vec in circleShuffle])) - sphere.append(np.array([self.rotateY(vec, 3*pi/5) for vec in circleShuffle])) - sphere.append(np.array([self.rotateY(vec, 4*pi/5) for vec in circleShuffle])) + sphere.append(np.array( + [self.rotateY(vec, pi/5) for vec in circleShuffle] + )) + sphere.append(np.array( + [self.rotateY(vec, 2*pi/5) for vec in circleShuffle] + )) + sphere.append(np.array( + [self.rotateY(vec, 3*pi/5) for vec in circleShuffle] + )) + sphere.append(np.array( + [self.rotateY(vec, 4*pi/5) for vec in circleShuffle] + )) sphereReduced = [] # will contain 1001 vectors for i in range(1001): if i in range(1, 1001//5 + 1): @@ -154,33 +184,58 @@ def callback(event): print(np.arange(0.1, pi, 0.1)) th = 1.57 - sphereInit = np.array([self.rotateX(self.rotateY(vec, th), th) for vec in sphereReduced]) + sphereInit = np.array([self.rotateX( + self.rotateY(vec, th), th + ) for vec in sphereReduced]) self.targets.append(sphereInit) self.targets.append(sphereInit) self.targets.append(sphereInit) for th in np.arange(0.1, pi, 0.1): if random() < 0.4 or th-3.1 < 0.000001: - self.targets.append(self.fuzzify(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]), 10, 10, 10) * self.lerp(0.1, 3.1, 1, 2.3, th)) + self.targets.append(self.fuzzify(np.array( + [self.rotateX(self.rotateY(vec, -th), + -th) for vec in sphereInit]), + 10, 10, 10) * self.lerp(0.1, 3.1, 1, 2.3, th)) else: - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]) * self.lerp(0.1, 3.1, 1, 2.3, th)) - # self.targets.append(self.swapDim(np.array([self.rotateY(vec, pi/th) for vec in circle]), 1, 2)) + self.targets.append(np.array( + [self.rotateX(self.rotateY(vec, -th), + -th) for vec in sphereInit]) * + self.lerp(0.1, 3.1, 1, 2.3, th)) + # self.targets.append(self.swapDim(np.array( + # [self.rotateY(vec, pi/th) for vec in circle]), 1, 2)) self.targets.append(np.array(self.targets[-1])) self.targets.append(np.array(self.targets[-1])) self.targets.append(np.array(self.targets[-1])) self.targets.append(np.array(self.targets[-1])) th = 3.15 - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]) * 1.3) - self.targets.append(self.fuzzify(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]), 10, 10, 10) * 1.3) - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in sphereInit]) * 1.3) + self.targets.append(np.array( + [self.rotateX(self.rotateY(vec, -th), + -th) for vec in sphereInit]) * 1.3) + self.targets.append(self.fuzzify(np.array( + [self.rotateX(self.rotateY(vec, -th), + -th) for vec in sphereInit]), 10, 10, 10) * 1.3) + self.targets.append(np.array( + [self.rotateX(self.rotateY(vec, -th), + -th) for vec in sphereInit]) * 1.3) prevState = np.array(self.targets[-1]) th = -1.57 - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) * 1.3) - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) * 1.3) - self.targets.append(self.fuzzify(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]), 10, 10, 10) * 1.3) - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) * 1.3) - self.targets.append(np.array([self.rotateX(self.rotateY(vec, -th), -th) for vec in prevState]) * 1.3) + self.targets.append(np.array( + [self.rotateX(self.rotateY(vec, -th), + -th) for vec in prevState]) * 1.3) + self.targets.append(np.array( + [self.rotateX(self.rotateY(vec, -th), + -th) for vec in prevState]) * 1.3) + self.targets.append(self.fuzzify(np.array( + [self.rotateX(self.rotateY(vec, -th), + -th) for vec in prevState]), 10, 10, 10) * 1.3) + self.targets.append(np.array( + [self.rotateX(self.rotateY(vec, -th), + -th) for vec in prevState]) * 1.3) + self.targets.append(np.array( + [self.rotateX(self.rotateY(vec, -th), + -th) for vec in prevState]) * 1.3) self.cycle = itertools.cycle(self.targets) self.cycleFuzz = itertools.cycle(self.targetsFuzz) @@ -192,8 +247,11 @@ def to3D(self, vec): def fuzzify(self, arr, xamp, yamp, zamp=None): if zamp is None: - return np.array([i + (xamp * random(), yamp * random()) for i in arr]) - return np.array([i + (xamp * random(), yamp * random(), zamp * random()) for i in arr]) + return np.array([i + (xamp * random(), + yamp * random()) for i in arr]) + return np.array([i + (xamp * random(), + yamp * random(), + zamp * random()) for i in arr]) def swapDim(self, arr, d1, d2): ret = [] @@ -208,10 +266,12 @@ def split(self, arr, dist, n): return np.array(arr) lower = arr[:len(arr)//2, :] - (dist, 0) upper = arr[len(arr)//2:, :] + (dist, 0) - return np.vstack((self.split(lower, dist/2, n-1), self.split(upper, dist/2, n-1))) + return np.vstack((self.split(lower, dist/2, n-1), + self.split(upper, dist/2, n-1))) def rotate(self, arr, rot): - matRot = np.array([[math.cos(rot), -math.sin(rot)], [math.sin(rot), math.cos(rot)]]) + matRot = np.array([[math.cos(rot), -math.sin(rot)], + [math.sin(rot), math.cos(rot)]]) return np.array([matRot.dot(v) for v in arr]) def interpolate(self, v1, v2, t): @@ -264,7 +324,8 @@ def bezier(self, ctx, p0, p1, p2, p3): bx, by = p1 cx, cy = p2 dx, dy = p3 - pathstring = " m{:f}, {:f} c{:f}, {:f}, {:f}, {:f}, {:f}, {:f}".format(ax, ay, bx, by, cx, cy, dx, dy) + pathstring = "m{:f}, {:f} c{:f}, {:f}, {:f}, {:f}, {:f}, {:f}" \ + .format(ax, ay, bx, by, cx, cy, dx, dy) symbol = aggdraw.Symbol(pathstring) ctx.symbol((0, 0), symbol, aggdraw.Pen((255, 0, 0))) @@ -279,7 +340,9 @@ def draw(self): if 1.0-self.dcol < 0.0000001: self.dcol = 0.0 self.colVec, self.colVecFin = self.colVecFin, self.colVec - self.brush = aggdraw.Brush((int(round(colCur[0])), int(round(colCur[1])), int(round(colCur[2])))) + self.brush = aggdraw.Brush((int(round(colCur[0])), + int(round(colCur[1])), + int(round(colCur[2])))) speed = 0.1 # interpolation speed. in range [0, 1] img = Image.new('RGBA', self.size, "black") From e32d1b28fe0f1e49e195ff3f979e7b14daa87386 Mon Sep 17 00:00:00 2001 From: El Acheche Anis Date: Thu, 11 Oct 2018 02:25:50 +0100 Subject: [PATCH 16/16] [PEP8] Fix W293 and W291 --- morph.py | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/morph.py b/morph.py index 526091e..1bb731f 100644 --- a/morph.py +++ b/morph.py @@ -28,7 +28,7 @@ def callback(event): (self.colVec[0], self.colVec[1], self.colVec[2]) ) # self.pen = aggdraw.Pen((255, 0, 0)) - + self.std = np.arange(0, 1.001, 0.001) randPts = np.random.rand(1001, 2)*2*self.size - self.size self.pts = randPts @@ -46,14 +46,14 @@ def callback(event): rad = 100 twopi = self.mapping(lambda x: pi*2*x, self.std) xs = self.mapping(lambda t: math.cos(pi*2*t)*rad, self.std) - ys = self.mapping(lambda t: math.sin(pi*2*t)*rad, self.std) + ys = self.mapping(lambda t: math.sin(pi*2*t)*rad, self.std) circle = np.dstack((xs, ys))[0] self.targets.append(self.interpolate(line, circle, 0.25)) self.targets.append(self.interpolate(line, circle, 0.5)) - self.targets.append(self.interpolate(line, circle, 0.75)) - self.targets.append(circle) - self.targets.append(circle) - self.targets.append(circle) + self.targets.append(self.interpolate(line, circle, 0.75)) + self.targets.append(circle) + self.targets.append(circle) + self.targets.append(circle) square = [] sideL = 100 # half side length @@ -92,7 +92,7 @@ def callback(event): )) # square2 = [] - # sideL = 70 + # sideL = 70 # for p in circle: # x, y = p # ax, ay = abs(x), abs(y) @@ -105,17 +105,17 @@ def callback(event): # square2.append([fx, fy]) # self.targets.append(self.split( # self.rotate(np.array(square2), pi/4), 50, 5 - # )) + # )) # self.targets.append(self.split( # self.rotate(np.array(square2), pi/4), 50, 5 - # )) + # )) self.targets.append(circle*0.01) self.targets.append(circle*0.01) self.targets.append(circle*0.01) self.targets.append(circle*0.01) - self.targets.append(self.split(line, 50, 5)) + self.targets.append(self.split(line, 50, 5)) self.targets.append(self.split(line, 50, 5)) self.targets.append(line) self.targets.append(line) @@ -133,15 +133,15 @@ def callback(event): self.targets.append(np.array(sinus)) for i in range(1, 10): - self.targets.append(self.interpolate(line, circle, i*0.1)) + self.targets.append(self.interpolate(line, circle, i*0.1)) self.targets.append(self.fuzzify(circle, 1, 1)) self.targets.append(self.fuzzify(circle, 2, 5)) - self.targets.append(self.fuzzify(circle, 3, 10)) - self.targets.append(circle) + self.targets.append(self.fuzzify(circle, 3, 10)) + self.targets.append(circle) - self.targets.append(randPts) - self.targets.append(randPts) - self.targets.append(randPts) + self.targets.append(randPts) + self.targets.append(randPts) + self.targets.append(randPts) self.targets.append(circle*10) self.targets.append(circle*0.01) @@ -181,7 +181,7 @@ def callback(event): sphereReduced.append(np.array(sphere[3][i])) else: sphereReduced.append(np.array(sphere[4][i])) - + print(np.arange(0.1, pi, 0.1)) th = 1.57 sphereInit = np.array([self.rotateX( @@ -200,7 +200,7 @@ def callback(event): else: self.targets.append(np.array( [self.rotateX(self.rotateY(vec, -th), - -th) for vec in sphereInit]) * + -th) for vec in sphereInit]) * self.lerp(0.1, 3.1, 1, 2.3, th)) # self.targets.append(self.swapDim(np.array( # [self.rotateY(vec, pi/th) for vec in circle]), 1, 2)) @@ -280,7 +280,7 @@ def interpolate(self, v1, v2, t): v1 = self.to3D(v1) else: v2 = self.to3D(v2) - return np.array(v1 + (v2-v1)*t) + return np.array(v1 + (v2-v1)*t) def transition(self): self.dt = 0 @@ -295,16 +295,16 @@ def lerp(seld, a, b, c, d, x): return m*x + p def update(self): - self.canvas.delete('all') + self.canvas.delete('all') self.photo = self.draw() self.canvas.create_image(0, 0, image=self.photo, anchor="nw") self.tk.after(1000//60, self.update) - + def mapping(self, func, arr): vfunc = np.vectorize(func) return vfunc(arr) - def rotateX(self, vec, th): + def rotateX(self, vec, th): y = math.cos(th)*vec[1] - math.sin(th)*vec[2] z = math.sin(th)*vec[1] + math.cos(th)*vec[2] return np.array([vec[0], y, z])