diff --git a/s177/s177.pyde b/s177/s177.pyde new file mode 100644 index 00000000..9c446462 --- /dev/null +++ b/s177/s177.pyde @@ -0,0 +1,95 @@ +# Alexandre B A Villares - https://abav.lugaralgum.com/sketch-a-day +from random import choice +from gif_export_wrapper import * +add_library('gifAnimation') + +GRID_SIZE = 40 +SKETCH_NAME = "s177" +OUTPUT = ".gif" + +def setup(): + randomSeed(1) + size(700, 700) + colorMode(HSB) + strokeCap(PROJECT) + strokeWeight(12) + print_text_for_readme(SKETCH_NAME, OUTPUT) + border = 5 + spacing = (width - border * 2) / GRID_SIZE + Node.spacing = spacing + for x in range(GRID_SIZE): + for y in range(GRID_SIZE): + Node.nodes.append(Node(border + spacing / 2 + x * spacing, + border + spacing / 2 + y * spacing)) + for node in Node.nodes: + node.set_nbs() + + Node.nodes[0].current = True + +def draw(): + + background(0) + for node in Node.nodes: + node.plot_links() + node.update() + +class Node(): + nodes = [] + + def __init__(self, x, y): + self.x = x + self.y = y + self.visited = False + self.current = False + self.links = [] + self.cor = 0 + + def plot_links(self): + for node in self.links: + stroke(color(self.cor % 256, 255, 255, 200)) + line(node.x, node.y, self.x, self.y) + + def set_nbs(self): + self.nbs, self.unvisited_nbs = [], [] + for node in Node.nodes: + if node != self and dist(node.x, node.y, + self.x, self.y) <= Node.spacing: + self.nbs.append(node) + self.unvisited_nbs.append(node) + + def set_unvisited_nbs(self): + self.unvisited_nbs = [node for node in self.nbs + if not node.visited] + + def update(self): + self.set_unvisited_nbs() + if self.current: + self.visited = True + if self.unvisited_nbs: + rnd_choice = choice(self.unvisited_nbs) + self.links.append(rnd_choice) + self.current = False + rnd_choice.current = True + rnd_choice.visited = True + rnd_choice.cor = self.cor + 1 + else: + branch_nodes = [node for node in Node.nodes + if node.visited and node.unvisited_nbs] + if branch_nodes: + print(len(branch_nodes)) + rnd_choice = branch_nodes[0] # choice(branch_nodes) + self.current = False + rnd_choice.current = True + else: + print("finished") + noLoop() + + +def print_text_for_readme(name, output): + 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(name, name[1:], output) + ) diff --git a/s177_gif/gif_export_wrapper.py b/s177_gif/gif_export_wrapper.py new file mode 100644 index 00000000..ebbea864 --- /dev/null +++ b/s177_gif/gif_export_wrapper.py @@ -0,0 +1,47 @@ +""" +Alexandre B A Villares http://abav.lugaralgum.com - GPL v3 + +A helper for the Processing gifAnimation library (https://github.com/jordanorelli) +ported to Processing 3 by 01010101 (https://github.com/01010101) +Download the library from https://github.com/01010101/GifAnimation/archive/master.zip +This helper was inspired by an example by Art Simon https://github.com/APCSPrinciples/AnimatedGIF/ + +Put at the start of your sketch: + add_library('gifAnimation') + from gif_exporter import gif_export +and at the end of draw(): + gif_export(GifMaker) +""" + +def gif_export(GifMaker, # gets a reference to the library + filename="exported", # .gif will be added + repeat=0, # 0 makes it an "endless" animation + quality=128, # quality range 0 - 255 + delay=170, # this is quick + frames=0, + finish=False): # 0 will stop on keyPressed or frameCount >= 100000 + global gifExporter + try: + gifExporter + except NameError: + gifExporter = GifMaker(this, filename + ".gif") + gifExporter.setRepeat(repeat) + gifExporter.setQuality(quality) + gifExporter.setDelay(delay) + gif_export._frame = frameCount + print("gif start") + + gifExporter.addFrame() + if finish: + gifExporter.finish() + noLoop() + if (frames == 0 and keyPressed or frameCount - gif_export._frame >= 100000) \ + or (frames != 0 and frameCount - gif_export._frame >= frames): + gifExporter.finish() + #background(255) + print("gif saved") + del(gifExporter) + noLoop() + return False + else: + return True diff --git a/s177_gif/s177_gif.pyde b/s177_gif/s177_gif.pyde new file mode 100644 index 00000000..9c446462 --- /dev/null +++ b/s177_gif/s177_gif.pyde @@ -0,0 +1,95 @@ +# Alexandre B A Villares - https://abav.lugaralgum.com/sketch-a-day +from random import choice +from gif_export_wrapper import * +add_library('gifAnimation') + +GRID_SIZE = 40 +SKETCH_NAME = "s177" +OUTPUT = ".gif" + +def setup(): + randomSeed(1) + size(700, 700) + colorMode(HSB) + strokeCap(PROJECT) + strokeWeight(12) + print_text_for_readme(SKETCH_NAME, OUTPUT) + border = 5 + spacing = (width - border * 2) / GRID_SIZE + Node.spacing = spacing + for x in range(GRID_SIZE): + for y in range(GRID_SIZE): + Node.nodes.append(Node(border + spacing / 2 + x * spacing, + border + spacing / 2 + y * spacing)) + for node in Node.nodes: + node.set_nbs() + + Node.nodes[0].current = True + +def draw(): + + background(0) + for node in Node.nodes: + node.plot_links() + node.update() + +class Node(): + nodes = [] + + def __init__(self, x, y): + self.x = x + self.y = y + self.visited = False + self.current = False + self.links = [] + self.cor = 0 + + def plot_links(self): + for node in self.links: + stroke(color(self.cor % 256, 255, 255, 200)) + line(node.x, node.y, self.x, self.y) + + def set_nbs(self): + self.nbs, self.unvisited_nbs = [], [] + for node in Node.nodes: + if node != self and dist(node.x, node.y, + self.x, self.y) <= Node.spacing: + self.nbs.append(node) + self.unvisited_nbs.append(node) + + def set_unvisited_nbs(self): + self.unvisited_nbs = [node for node in self.nbs + if not node.visited] + + def update(self): + self.set_unvisited_nbs() + if self.current: + self.visited = True + if self.unvisited_nbs: + rnd_choice = choice(self.unvisited_nbs) + self.links.append(rnd_choice) + self.current = False + rnd_choice.current = True + rnd_choice.visited = True + rnd_choice.cor = self.cor + 1 + else: + branch_nodes = [node for node in Node.nodes + if node.visited and node.unvisited_nbs] + if branch_nodes: + print(len(branch_nodes)) + rnd_choice = branch_nodes[0] # choice(branch_nodes) + self.current = False + rnd_choice.current = True + else: + print("finished") + noLoop() + + +def print_text_for_readme(name, output): + 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(name, name[1:], output) + ) diff --git a/s178/s178.pyde b/s178/s178.pyde new file mode 100644 index 00000000..9c814b32 --- /dev/null +++ b/s178/s178.pyde @@ -0,0 +1,93 @@ +# Alexandre B A Villares - https://abav.lugaralgum.com/sketch-a-day +from random import choice + +GRID_SIZE = 49 +SKETCH_NAME = "s178" +OUTPUT = ".png" + +def setup(): + randomSeed(1) + size(700, 700) + colorMode(HSB) + strokeCap(ROUND) + strokeWeight(10) + print_text_for_readme(SKETCH_NAME, OUTPUT) + border = 5 + spacing = (width - border * 2) / GRID_SIZE + Node.spacing = spacing + for x in range(GRID_SIZE): + for y in range(GRID_SIZE): + Node.nodes.append(Node(border + spacing / 2 + x * spacing, + border + spacing / 2 + y * spacing)) + for node in Node.nodes: + node.set_nbs() + + Node.nodes[0].current = True + +def draw(): + + background(0) + for node in Node.nodes: + node.plot_links() + node.update() + +class Node(): + nodes = [] + + def __init__(self, x, y): + self.x = x + self.y = y + self.visited = False + self.current = False + self.links = [] + self.cor = 0 + + def plot_links(self): + for node in self.links: + stroke(color(self.cor % 256, 255, 255, 200)) + line(node.x, node.y, self.x, self.y) + + def set_nbs(self): + self.nbs, self.unvisited_nbs = [], [] + for node in Node.nodes: + if node != self and dist(node.x, node.y, + self.x, self.y) <= Node.spacing: + self.nbs.append(node) + self.unvisited_nbs.append(node) + + def set_unvisited_nbs(self): + self.unvisited_nbs = [node for node in self.nbs + if not node.visited] + + def update(self): + self.set_unvisited_nbs() + if self.current: + self.visited = True + if self.unvisited_nbs: + rnd_choice = choice(self.unvisited_nbs) + self.links.append(rnd_choice) + self.current = False + rnd_choice.current = True + rnd_choice.visited = True + rnd_choice.cor = self.cor + 1 + else: + branch_nodes = [node for node in Node.nodes + if node.visited and node.unvisited_nbs] + if branch_nodes: + print(len(branch_nodes)) + rnd_choice = choice((branch_nodes[-1], branch_nodes[0])) # choice(branch_nodes) + self.current = False + rnd_choice.current = True + else: + print("finished") + noLoop() + + +def print_text_for_readme(name, output): + 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(name, name[1:], output) + )