kopia lustrzana https://github.com/villares/sketch-a-day
				
				
				
			
		
			
				
	
	
		
			114 wiersze
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			114 wiersze
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
# Alexandre B A Villares - https://abav.lugaralgum.com/sketch-a-day
 | 
						|
SKETCH_NAME = "s110"  # 180420
 | 
						|
 | 
						|
add_library('serial')  # import processing.serial.*;
 | 
						|
add_library('arduino')  # import cc.arduino.*;
 | 
						|
add_library('gifAnimation')
 | 
						|
 | 
						|
from gif_exporter import *
 | 
						|
from inputs import *
 | 
						|
 | 
						|
ELEMENTS = []
 | 
						|
GIF_EXPORT = False
 | 
						|
 | 
						|
def setup():
 | 
						|
    global input
 | 
						|
    size(600, 600)
 | 
						|
    noFill()  # sem preenchimento
 | 
						|
    frameRate(30)
 | 
						|
    strokeWeight(3)
 | 
						|
    colorMode(HSB)
 | 
						|
    # Ask user for Arduino port, uses slider if none is selected`
 | 
						|
    input = Input(Arduino, slider_pins=[1, 2, 3, 4])
 | 
						|
 | 
						|
def draw():
 | 
						|
    background(0)  # fundo preto
 | 
						|
 | 
						|
    grid_elem = int(input.analog(1) / 16)  # 0 a 63 linhas e colunas na grade
 | 
						|
    elem_size = int(input.analog(2) / 16)  # 0 a 63 tamanho base dos quadrados
 | 
						|
    rand_size = int(input.analog(3) / 16)  # escala a randomização do tamanho
 | 
						|
    rand_posi = int(input.analog(4) / 16)  # escala a randomização da posição
 | 
						|
    # trava a random entre os ciclos de draw
 | 
						|
    # mas varia com o número de colunas na grade
 | 
						|
    randomSeed(int(input.analog(1)) / 4)
 | 
						|
    # espaçamento entre os elementos
 | 
						|
    spac_size = width / (grid_elem + 1)
 | 
						|
    v = spac_size * 1.5
 | 
						|
    h = spac_size * sqrt(3)
 | 
						|
    for ix in range(-1, grid_elem + 1):
 | 
						|
        for iy in range(-1, grid_elem + 1):
 | 
						|
            if iy % 2:
 | 
						|
                x = ix * h + h / 4
 | 
						|
            else:
 | 
						|
                x = ix * h - h / 4
 | 
						|
            if ix % 2:
 | 
						|
                es = elem_size
 | 
						|
            else:
 | 
						|
                es = -elem_size
 | 
						|
            y = iy * v
 | 
						|
            for i in range(3):
 | 
						|
                final_size = es * (i + 0.5)
 | 
						|
                C = color(map(final_size, -63, 63, 0, 255),
 | 
						|
                          255, 255)
 | 
						|
                oX = rand_posi * random(-1, 1)
 | 
						|
                oY = rand_posi * random(-1, 1)
 | 
						|
                ELEMENTS.append((C, x + oX, y + oY, final_size))
 | 
						|
    # three layers of elements
 | 
						|
    for e0, e1, e2 in zip(ELEMENTS[0::3], ELEMENTS[1::3], ELEMENTS[2::3]):
 | 
						|
        st0, x0, y0, es0 = e0
 | 
						|
        st1, x1, y1, es1 = e1
 | 
						|
        st2, x2, y2, es2 = e2
 | 
						|
        fs0 = es0 + rand_size * random(-1, 1)
 | 
						|
        fs1 = es1 + rand_size * random(-1, 1)
 | 
						|
        fs2 = es2 + rand_size * random(-1, 1)
 | 
						|
        rotate(fs0)
 | 
						|
        stroke(st0)
 | 
						|
        equilateral(x0, y0, fs0)
 | 
						|
        stroke(st1)
 | 
						|
        rotate(fs1)
 | 
						|
        equilateral(x1, y1, fs1)
 | 
						|
        stroke(st2)
 | 
						|
        rotate(fs2)
 | 
						|
        equilateral(x2, y2, fs2)
 | 
						|
 | 
						|
    # empty list
 | 
						|
    ELEMENTS[:] = []
 | 
						|
 | 
						|
    # uncomment next lines to export GIF
 | 
						|
    global GIF_EXPORT
 | 
						|
    if not frameCount % 20 and GIF_EXPORT:
 | 
						|
        GIF_EXPORT = gif_export(GifMaker,
 | 
						|
                                frames=1000,
 | 
						|
                                delay=300,
 | 
						|
                                filename=SKETCH_NAME)
 | 
						|
 | 
						|
    # Updates reading or draws sliders and checks mouse dragging / keystrokes
 | 
						|
    input.update()
 | 
						|
 | 
						|
 | 
						|
def keyPressed():
 | 
						|
    global GIF_EXPORT
 | 
						|
    if key == 'p':  # save PNG
 | 
						|
        saveFrame("####.png")
 | 
						|
    if key == 'g':  # save GIF
 | 
						|
        GIF_EXPORT = True
 | 
						|
    if key == 'h':
 | 
						|
        input.help()
 | 
						|
 | 
						|
    input.keyPressed()
 | 
						|
 | 
						|
def keyReleased():
 | 
						|
    input.keyReleased()
 | 
						|
 | 
						|
def rnd_choice(collection):
 | 
						|
    i = int(random(len(collection)))
 | 
						|
    return collection[i]
 | 
						|
 | 
						|
def equilateral(x, y, r):
 | 
						|
    with pushMatrix():
 | 
						|
        translate(x, y)
 | 
						|
        triangle(-0.866 * r, -0.5 * r,
 | 
						|
                 0.866 * r, -0.5 * r,
 | 
						|
                 # 0.000 * r,  1.0 * r)
 | 
						|
                 0, r)
 |