kopia lustrzana https://github.com/villares/sketch-a-day
131 wiersze
3.9 KiB
Plaintext
131 wiersze
3.9 KiB
Plaintext
|
|
# Alexandre B A Villares - https://abav.lugaralgum.com/sketch-a-day
|
||
|
|
SKETCH_NAME = "s301" # 20181026
|
||
|
|
OUTPUT = ".png"
|
||
|
|
GRID_SIZE = 24
|
||
|
|
|
||
|
|
from line_geometry import edges
|
||
|
|
from line_geometry import Line
|
||
|
|
from line_geometry import inter_lines
|
||
|
|
|
||
|
|
def setup():
|
||
|
|
global xo, yo
|
||
|
|
size(500, 500)
|
||
|
|
init_grid(GRID_SIZE)
|
||
|
|
|
||
|
|
def draw():
|
||
|
|
background(200)
|
||
|
|
for c in Cell.cells:
|
||
|
|
c.plot()
|
||
|
|
|
||
|
|
def init_grid(grid_size):
|
||
|
|
Cell.border = 50
|
||
|
|
Cell.spacing = (width - Cell.border * 2) / grid_size
|
||
|
|
Cell.cells = []
|
||
|
|
|
||
|
|
for x in range(0, grid_size, 2):
|
||
|
|
for y in range(0, grid_size, 2):
|
||
|
|
new_cell = Cell(x, y)
|
||
|
|
Cell.cells.append(new_cell)
|
||
|
|
Cell.grid[x, y] = new_cell
|
||
|
|
|
||
|
|
Node.nodes = []
|
||
|
|
for x in range(-1, grid_size+1, 2):
|
||
|
|
for y in range(-1, grid_size+1, 2):
|
||
|
|
new_node = Node(x, y)
|
||
|
|
#Cell.cells.append(new_node) # mudar!
|
||
|
|
Cell.grid[x, y] = new_node # extrarir do dict
|
||
|
|
|
||
|
|
for c in Cell.cells:
|
||
|
|
c.update_vers()
|
||
|
|
|
||
|
|
class Node():
|
||
|
|
nodes = []
|
||
|
|
grid = dict()
|
||
|
|
|
||
|
|
def __init__(self, x, y):
|
||
|
|
self.ix = x
|
||
|
|
self.iy = y
|
||
|
|
self.px = Cell.border + Cell.spacing + x * Cell.spacing
|
||
|
|
self.py = Cell.border + Cell.spacing + y * Cell.spacing
|
||
|
|
# if x/2 % 3: self.px += random(-10, 10)
|
||
|
|
# if y/2 % 3: self.py += random(-10, 10)
|
||
|
|
self.px += random(-10, 10)
|
||
|
|
self.py += random(-10, 10)
|
||
|
|
self.x = self.px
|
||
|
|
self.y = self.py
|
||
|
|
self.v = PVector(self.x, self.y)
|
||
|
|
|
||
|
|
class Cell():
|
||
|
|
cells = []
|
||
|
|
grid = dict()
|
||
|
|
vers = []
|
||
|
|
|
||
|
|
def __init__(self, x, y):
|
||
|
|
self.ix = x
|
||
|
|
self.iy = y
|
||
|
|
self.px = Cell.border + Cell.spacing / 2 + x * Cell.spacing
|
||
|
|
self.py = Cell.border + Cell.spacing / 2 + y * Cell.spacing
|
||
|
|
self.vers = []
|
||
|
|
|
||
|
|
def plot(self):
|
||
|
|
stroke(0)
|
||
|
|
strokeWeight(1)
|
||
|
|
for l in self.lines:
|
||
|
|
l.plot()
|
||
|
|
beginShape()
|
||
|
|
noFill()
|
||
|
|
stroke(0)
|
||
|
|
strokeWeight(2)
|
||
|
|
for p in self.vers:
|
||
|
|
vertex(p.x, p.y)
|
||
|
|
endShape(CLOSE)
|
||
|
|
|
||
|
|
def update_vers(self):
|
||
|
|
self.v0 = Cell.grid.get((self.ix-1, self.iy-1))
|
||
|
|
self.v1 = Cell.grid.get((self.ix-1, self.iy+1))
|
||
|
|
self.v3 = Cell.grid.get((self.ix+1, self.iy-1))
|
||
|
|
self.v2 = Cell.grid.get((self.ix+1, self.iy+1))
|
||
|
|
if random(10) > 2:
|
||
|
|
self.vers = [self.v0, self.v1, self.v2, self.v3]
|
||
|
|
elif random(2) > 1:
|
||
|
|
self.vers = [self.v0, self.v1, self.v1, self.v3]
|
||
|
|
else:
|
||
|
|
self.vers = [self.v0, self.v2, self.v2, self.v3]
|
||
|
|
self.hatch()
|
||
|
|
|
||
|
|
def hatch(self):
|
||
|
|
poly_points = self.vers
|
||
|
|
# min_, max_ = min_max(poly_points)
|
||
|
|
self.lines = []
|
||
|
|
s = int(random(3, 7))
|
||
|
|
r = random(10)
|
||
|
|
if r > 5:
|
||
|
|
for y in range(-height, height*2, s):
|
||
|
|
a = PVector(-width, y - self.v0.y/2.)
|
||
|
|
b = PVector(width*2, y + self.v0.y/3.)
|
||
|
|
lines = inter_lines(Line(a, b), poly_points)
|
||
|
|
for l in lines:
|
||
|
|
self.lines.append(l)
|
||
|
|
if r < 6:
|
||
|
|
for x in range(-width, width*2, s):
|
||
|
|
a = PVector(x + self.v2.x/2., -height)
|
||
|
|
b = PVector(x - self.v2.x/3., height*2,)
|
||
|
|
lines = inter_lines(Line(a, b), poly_points)
|
||
|
|
for l in lines:
|
||
|
|
self.lines.append(l)
|
||
|
|
|
||
|
|
def keyPressed():
|
||
|
|
if key == "n":
|
||
|
|
init_grid(GRID_SIZE)
|
||
|
|
if key == "s": saveFrame("###.png")
|
||
|
|
|
||
|
|
# print text to add to the project's README.md
|
||
|
|
def settings():
|
||
|
|
println(
|
||
|
|
"""
|
||
|
|

|
||
|
|
|
||
|
|
{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)
|
||
|
|
)
|