kopia lustrzana https://github.com/villares/sketch-a-day
				
				
				
			
		
			
				
	
	
		
			63 wiersze
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			63 wiersze
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
# Alexandre B A Villares - https://abav.lugaralgum.com/sketch-a-day
 | 
						|
# Mouse swirl on lines
 | 
						|
 | 
						|
def setup():
 | 
						|
    size(500, 500)
 | 
						|
    smooth()
 | 
						|
    for i in range(-9, 10):
 | 
						|
        for j in range(-9, 10):
 | 
						|
            Point(i, j)
 | 
						|
 | 
						|
def draw():
 | 
						|
    background(240, 240, 200)
 | 
						|
    translate(width / 2, height / 2)
 | 
						|
    for p in Point.grid.values():
 | 
						|
        p.plot()
 | 
						|
 | 
						|
class Point():
 | 
						|
 | 
						|
    grid = dict()
 | 
						|
    nbr = ((0, -1),  (0, 1))
 | 
						|
 | 
						|
    def __init__(self, i, j):
 | 
						|
        self.i = i
 | 
						|
        self.j = j
 | 
						|
        self.grid[(i, j)] = self
 | 
						|
        self.space = 25
 | 
						|
        self.ox = self.x = self.i * self.space
 | 
						|
        self.oy = self.y = self.j * self.space
 | 
						|
 | 
						|
    def place(self):
 | 
						|
        offx, offy = self.ox - self.x, self.oy - self.y
 | 
						|
        mx, my = mouseX - width / 2., mouseY - height / 2.
 | 
						|
        dx, dy = self.ox - mx, self.oy - my
 | 
						|
        d = dist(mx, my, dx, dy)
 | 
						|
        move_factor = 50 / (1 + d)
 | 
						|
        if move_factor > 0.1:
 | 
						|
            self.x += move_factor * -(-1 if dy < 0 else 1)
 | 
						|
            self.y += move_factor * (-1 if dx < 0 else 1)
 | 
						|
        self.x += offx * .01
 | 
						|
        self.y += offy * .01
 | 
						|
        return (self.x, self.y)
 | 
						|
 | 
						|
    def plot(self):
 | 
						|
        stroke(0)
 | 
						|
        strokeWeight(1)
 | 
						|
        fill(128, 100)
 | 
						|
        beginShape()
 | 
						|
        sx, sy = self.place()
 | 
						|
        for oi, oj in self.nbr:
 | 
						|
            nbr_ij = (self.i + oi, self.j + oj)
 | 
						|
            other = self.grid.get(nbr_ij)
 | 
						|
            if other:
 | 
						|
                ox, oy = other.place()
 | 
						|
                mx, my = (ox + sx) / 2., (oy + sy) / 2.
 | 
						|
                vertex(mx, my)
 | 
						|
        endShape()
 | 
						|
        strokeWeight(3)
 | 
						|
        point(sx, sy)
 | 
						|
 | 
						|
 | 
						|
def keyPressed():
 | 
						|
    saveFrame("####.png")
 |