From 1e2fc9d3ead7098d0fbb2b95deeceb9e60199f53 Mon Sep 17 00:00:00 2001 From: Alexandre B A Villares Date: Tue, 9 Oct 2018 23:59:36 -0300 Subject: [PATCH] 284 --- s284/2621.png | Bin 0 -> 30896 bytes s284/node.py | 68 ++++++++++++++++++++++++++++++++++++ s284/s284.pyde | 93 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 161 insertions(+) create mode 100644 s284/2621.png create mode 100644 s284/node.py create mode 100644 s284/s284.pyde diff --git a/s284/2621.png b/s284/2621.png new file mode 100644 index 0000000000000000000000000000000000000000..931de2daeedffd091417429670313ee8a848a324 GIT binary patch literal 30896 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 literal 0 HcmV?d00001 diff --git a/s284/node.py b/s284/node.py new file mode 100644 index 00000000..bdc0492b --- /dev/null +++ b/s284/node.py @@ -0,0 +1,68 @@ +class Node(): + nodes = [] + grid = dict() + ver = set() + + def __init__(self, x, y, z): + self.ix = x + self.iy = y + self.iz = z + self.x = Node.border + Node.spacing / 2 + x * Node.spacing - width / 2 + self.y = Node.border + Node.spacing / 2 + y * Node.spacing - width / 2 + self.z = Node.border + Node.spacing / 2 + z * Node.spacing - width / 2 + self.size_ = 1 + self.cor = None + self.nb = {0 : False, # |* left + 1 : False, # *| right + 2 : False, # - top + 3 : False, # _ bottom + 4 : False, + 5 : False, + } + + self.borders = [] + + def plot(self): + """ draws node """ + if self.cor: + noFill() #stroke(0) + stroke(self.cor) + with pushMatrix(): + translate(0, 0, self.z) + #rect(0, 0, Node.spacing * self.size_, Node.spacing * self.size_) + self.draw_borders() + + def draw_borders(self): + if self.borders: + for x1, y1, x2, y2 in self.borders: + line(x1, y1, x2, y2) + + + def update_borders(self): + b = self.borders + w = h = Node.spacing * self.size_ + tlX, tlY = self.x - w/2, self.y - h/2 + trX, trY = self.x + w/2, self.y - h/2 + blX, blY = self.x - w/2, self.y + h/2 + brX, brY = self.x + w/2, self.y + h/2 + if not self.nb[0]: b.append((tlX, tlY, blX, blY)) + if not self.nb[1]: b.append((trX, trY, brX, brY)) + if not self.nb[2]: b.append((tlX, tlY, trX, trY)) + if not self.nb[3]: b.append((blX, blY, brX, brY)) + + def update_nbs(self): + nb0 = Node.grid.get((self.ix-1, self.iy, self.iz)) + self.nb[0] = True if nb0 and nb0.cor else False + nb1 = Node.grid.get((self.ix+1, self.iy, self.iz)) + self.nb[1] = True if nb1 and nb1.cor else False + nb2 = Node.grid.get((self.ix, self.iy-1, self.iz)) + self.nb[2] = True if nb2 and nb2.cor else False + nb3 = Node.grid.get((self.ix, self.iy+1, self.iz)) + self.nb[3] = True if nb3 and nb3.cor else False + nb4 = Node.grid.get((self.ix, self.iy, self.iz-1)) + self.nb[4] = True if nb4 and nb4.cor else False + nb5 = Node.grid.get((self.ix, self.iy, self.iz+1)) + self.nb[5] = True if nb5 and nb5.cor else False + + self.update_borders() + diff --git a/s284/s284.pyde b/s284/s284.pyde new file mode 100644 index 00000000..1dae6110 --- /dev/null +++ b/s284/s284.pyde @@ -0,0 +1,93 @@ +# Alexandre B A Villares - https://abav.lugaralgum.com/sketch-a-day +SKETCH_NAME = "s284" # 2018109 +OUTPUT = ".gif" +GRID_SIZE = 6 + +add_library('peasycam') +from random import seed +from random import choice +from random import randint + +from node import Node + +def setup(): + global ang + ang = 0 + size(500, 500, P3D) + colorMode(HSB) + strokeWeight(2) + cam = PeasyCam(this, 100) + cam.setMinimumDistance(750) + cam.setMaximumDistance(750) + random_seed(101) + init_grid(GRID_SIZE) + + +def draw(): + global ang + background(0) + rotateY(ang) + for node in Node.nodes: + node.plot() + + for l in range(GRID_SIZE): + beginShape() + for x, y, z, iz in Node.ver: + if l == iz: + vertex(x, y, z+1) + endShape() + + if ang <= TWO_PI: + #saveFrame("###.png") + ang += 0.02 + +def init_grid(grid_size): + Node.border = 10 + Node.spacing = (width - Node.border * 2) / grid_size + Node.nodes = [] + Node.ver = [] + for x in range(grid_size): + for y in range(grid_size): + for z in range(grid_size): + new_node = Node(x, y, z) + Node.nodes.append(new_node) + Node.grid[x, y, z] = new_node + if randint(1, 10) > 5: + new_node.cor = color(z * 28, 255, 255) + else: + new_node.cor = None + + for node in Node.nodes: + node.update_nbs() + + for node in Node.nodes: + for x1, y1, x2, y2 in node.borders: + Node.ver.append((x1, y1, node.z, node.iz)) + Node.ver.append((x2, y2, node.z, node.iz)) + + +def keyPressed(): + if key == "n": + init_grid(GRID_SIZE) + if key == "s": saveFrame("###.png") + + +def random_seed(s=None): + global rnd_seed + if s: + rnd_seed = s + seed(rnd_seed) + randomSeed(rnd_seed) + else: + seed(rnd_seed) + randomSeed(rnd_seed) + +# print text to add to the project's README.md +def settings(): + println( +""" +![{0}]({0}/{0}{2}) + +{1}: [code](https://github.com/villares/sketch-a-day/tree/master/{0}) [[Py.Processing](https://villares.github.io/como-instalar-o-processing-modo-python/index-EN)] +""".format(SKETCH_NAME, SKETCH_NAME[1:], OUTPUT) + )