kopia lustrzana https://github.com/villares/sketch-a-day
day 50
rodzic
081b2a28c7
commit
c80fa09990
|
@ -0,0 +1,100 @@
|
|||
"""
|
||||
sketch 45b 180214 - Alexandre B A Villares
|
||||
https://abav.lugaralgum.com/sketch-a-day
|
||||
"""
|
||||
|
||||
LIST = []
|
||||
SRINK = .50
|
||||
OFFSET = .25
|
||||
SIZE = 512 # base size
|
||||
SAVE_FRAME = False
|
||||
DRAW_MODE = rect
|
||||
|
||||
def setup():
|
||||
size(512 + 200, 512 + 200)
|
||||
rectMode(CENTER)
|
||||
colorMode(HSB)
|
||||
strokeWeight(2)
|
||||
LIST.append(Cell())
|
||||
|
||||
def draw():
|
||||
translate(width / 2, height / 2)
|
||||
background(200)
|
||||
for cell in LIST:
|
||||
cell.update()
|
||||
save_frame() # saves frame if SAVE_FRAME is set True
|
||||
|
||||
def keyPressed():
|
||||
global SAVE_FRAME, DRAW_MODE
|
||||
if key == " ":
|
||||
LIST[:] = [Cell()]
|
||||
if key == "r":
|
||||
if DRAW_MODE == rect:
|
||||
DRAW_MODE = ellipse
|
||||
else: DRAW_MODE = rect
|
||||
SAVE_FRAME = True
|
||||
|
||||
|
||||
class Cell():
|
||||
|
||||
def __init__(self, x=0, y=0, gen=0, gen_offset=0,
|
||||
xo=0, yo=0, mother=None):
|
||||
self.LIST = []
|
||||
self.x, self.y, self.xo, self.yo = x, y, xo, yo
|
||||
self.gen = gen
|
||||
self.mother = mother
|
||||
self.color = color(random(0, 200), 200, 200, 200)
|
||||
|
||||
def s(self): # size
|
||||
return SIZE * (SRINK ** self.gen)
|
||||
|
||||
def update(self):
|
||||
self.draw() # draws itself
|
||||
if not self.LIST:
|
||||
# if no sub-cells, its a lead (para células sem sub-células)
|
||||
# and if mouse is pressed inside it
|
||||
if mousePressed and self.on_mouse():
|
||||
self.divide() # will create new sub-cells
|
||||
# otherwise will recursively update sub-cells and draw a line to them
|
||||
else:
|
||||
for sub_cell in self.LIST:
|
||||
sub_cell.update()
|
||||
stroke(0)
|
||||
line(self.x, self.y, sub_cell.x, sub_cell.y)
|
||||
|
||||
def draw(self):
|
||||
draw_function = DRAW_MODE
|
||||
x =self.x + self.xo * self.s() * OFFSET
|
||||
y =self.y + self.yo * self.s() * OFFSET
|
||||
noStroke()
|
||||
fill(self.color)
|
||||
draw_function(x, y, self.s(), self.s())
|
||||
fill(0)
|
||||
draw_function(x, y, 4, 4)
|
||||
#text(str(self.gen), self.x, self.y)
|
||||
|
||||
def divide(self):
|
||||
if self.gen < 6:
|
||||
global SAVE_FRAME
|
||||
SAVE_FRAME = True
|
||||
new_gen = self.gen + 1
|
||||
o = self.s() * OFFSET
|
||||
go = 0 #new_gen * 2
|
||||
self.LIST.append(Cell(gen=new_gen, xo=+1, yo=+1, mother=self))
|
||||
self.LIST.append(Cell(gen=new_gen, xo=+1, yo=-1, mother=self))
|
||||
self.LIST.append(Cell(gen=new_gen, xo=-1, yo=+1, mother=self))
|
||||
self.LIST.append(Cell(gen=new_gen, xo=-1, yo=-1, mother=self))
|
||||
#self.gen = 6
|
||||
|
||||
def on_mouse(self):
|
||||
x, y = self.x + width / 2, self.y + height / 2
|
||||
r = self.s() / 2
|
||||
if (x - r < mouseX < x + r and
|
||||
y - r < mouseY < y + r):
|
||||
return True
|
||||
|
||||
def save_frame():
|
||||
global SAVE_FRAME
|
||||
if SAVE_FRAME:
|
||||
SAVE_FRAME = False
|
||||
# saveFrame("45-######.tga")
|
|
@ -60,7 +60,7 @@ class Cell():
|
|||
# SAVE_FRAME = True
|
||||
if mousePressed and self.on_mouse():
|
||||
self.divide() # will create new sub-cells
|
||||
SAVE_FRAME = True
|
||||
#SAVE_FRAME = True
|
||||
# otherwise will recursively update sub-cells and draw a line to them
|
||||
else:
|
||||
for sub_cell in self.LIST:
|
||||
|
@ -72,7 +72,7 @@ class Cell():
|
|||
noStroke()
|
||||
fill(self.color)
|
||||
s = self.gen % len(NODE_DRAW)
|
||||
NODE_DRAW[s)](self.x, self.y, self.s(), self.s())
|
||||
NODE_DRAW[s](self.x, self.y, self.s(), self.s())
|
||||
fill(0)
|
||||
NODE_DRAW[s](self.x, self.y, 4, 4)
|
||||
#text(str(self.gen), self.x, self.y)
|
||||
|
@ -101,4 +101,4 @@ def save_frame():
|
|||
if SAVE_FRAME:
|
||||
SAVE_FRAME = False
|
||||
#if frameCount < 600: #and not frameCount % 3:
|
||||
saveFrame("48-######.tga")
|
||||
saveFrame("49-######.tga")
|
|
@ -0,0 +1,52 @@
|
|||
import random as rnd
|
||||
|
||||
LISTA = []
|
||||
MARGIN = 25
|
||||
|
||||
def setup():
|
||||
size(500, 500)
|
||||
background(200)
|
||||
noFill()
|
||||
smooth(12)
|
||||
|
||||
def draw():
|
||||
for x, y, s, w, arrow, sub_list in LISTA:
|
||||
strokeWeight(w)
|
||||
for n in sub_list:
|
||||
if arrow:
|
||||
stroke(0)
|
||||
seta(x, y, n[0], n[1], s, w*5)
|
||||
else:
|
||||
stroke(255)
|
||||
line(x, y, n[0], n[1])
|
||||
ellipse(x, y, s, s)
|
||||
|
||||
|
||||
def keyPressed():
|
||||
background(200)
|
||||
LISTA[:] = []
|
||||
for _ in range(20):
|
||||
LISTA.append((
|
||||
random(MARGIN, width - MARGIN), # x
|
||||
random(MARGIN, height - MARGIN), # y
|
||||
rnd.choice([10, 20, 30]), # size
|
||||
rnd.choice([2, 3, 5]), # strokeW
|
||||
rnd.choice([True, False]), # arrow
|
||||
list() # other nodes
|
||||
))
|
||||
for node in LISTA:
|
||||
random_node = rnd.choice(LISTA)
|
||||
if random_node != node:
|
||||
node[-1].append(random_node)
|
||||
|
||||
|
||||
def seta(x1, y1, x2, y2, encurta=12, head=12):
|
||||
d = dist(x1, y1, x2, y2)
|
||||
with pushMatrix():
|
||||
translate(x2, y2)
|
||||
angle = atan2(x1 - x2, y2 - y1)
|
||||
rotate(angle)
|
||||
offset = -encurta * .6
|
||||
line(0, offset, 0, -d - offset)
|
||||
line(0, offset, -head / 3, -head + offset)
|
||||
line(0, offset, head / 3, -head + offset)
|
|
@ -0,0 +1,2 @@
|
|||
mode=Python
|
||||
mode.id=jycessing.mode.PythonMode
|
Ładowanie…
Reference in New Issue