kopia lustrzana https://github.com/villares/sketch-a-day
				
				
				
			
		
			
				
	
	
		
			69 wiersze
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			69 wiersze
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
from random import choice
 | 
						|
from arcs import quarter_circle, half_circle, circle_arc
 | 
						|
 | 
						|
class Node():
 | 
						|
    nodes = []
 | 
						|
 
 | 
						|
    def __init__(self, x, y):
 | 
						|
        self.x = Node.border + Node.spacing / 2 + x * Node.spacing - width / 2
 | 
						|
        self.y = Node.border + Node.spacing / 2 + y * Node.spacing - height / 2
 | 
						|
        self.size_ = 1
 | 
						|
        self.rot0 = choice((0, HALF_PI))  # , PI, PI + HALF_PI))
 | 
						|
        self.rot1 = choice((HALF_PI, PI))  # , PI + HALF_PI))
 | 
						|
        self.type = choice(("f1", "f2", "t", "i", "l"))
 | 
						|
        
 | 
						|
    def plot(self, ang):
 | 
						|
        """ draws node """
 | 
						|
        with pushMatrix():
 | 
						|
            translate(self.x, self.y)
 | 
						|
            d = abs(self.rot0 + ang - self.rot1)
 | 
						|
            if d >= 0.30:
 | 
						|
                rotate(self.rot0 + ang)
 | 
						|
            else:
 | 
						|
                self.rot0 = self.rot1 - ang
 | 
						|
                rotate(self.rot1)
 | 
						|
            noFill()  # stroke(0)
 | 
						|
            siz = Node.spacing * self.size_
 | 
						|
            l = siz / 2.
 | 
						|
            a = l / 2. - 1
 | 
						|
            c = l / 2. + 1
 | 
						|
            stroke(0, 0, 200, 50)
 | 
						|
            rect(0, 0, siz, siz)
 | 
						|
            for i in range(-4, 5, 4):  # (-28, 29, 7):
 | 
						|
                stroke(32, 64 + i * 8, 64 - i * 8)
 | 
						|
                if self.type == "f1":
 | 
						|
                    quarter_circle(l, l, c + i, TOP + LEFT)
 | 
						|
                    quarter_circle(-l, -l, c + i, BOTTOM + RIGHT)
 | 
						|
                    quarter_circle(-l, l, c + i, TOP + RIGHT)
 | 
						|
                    quarter_circle(l, -l, c + i, BOTTOM + LEFT)
 | 
						|
                elif self.type == "f2":
 | 
						|
                    half_circle(-l, 0, a - i, RIGHT)
 | 
						|
                    half_circle(l, 0, a - i, LEFT)
 | 
						|
                    half_circle(0, l, a - i, TOP)
 | 
						|
                    half_circle(0, -l, a - i, BOTTOM)
 | 
						|
                elif self.type == "t":
 | 
						|
                    half_circle(-l, 0, a - i, RIGHT)
 | 
						|
                    half_circle(l, 0, a - i, LEFT)                    
 | 
						|
                    half_circle(0, -l, a - i, BOTTOM)
 | 
						|
                elif self.type == "i":               
 | 
						|
                    half_circle(0, l, a - i, TOP)
 | 
						|
                    half_circle(0, -l, a - i, BOTTOM)
 | 
						|
                elif self.type == "l":
 | 
						|
                    half_circle(-l, 0, a - i, RIGHT)
 | 
						|
                    half_circle(l, 0, a - i, LEFT)                    
 | 
						|
 | 
						|
                
 | 
						|
 | 
						|
    @classmethod                                            
 | 
						|
    def init_grid(cls, grid_size, border):
 | 
						|
        cls.border = border
 | 
						|
        cls.spacing = (width - cls.border * 2) / grid_size
 | 
						|
        cls.nodes = []
 | 
						|
        for x in range(grid_size):
 | 
						|
            for y in range(grid_size):
 | 
						|
                    new_node = cls(x, y)
 | 
						|
                    cls.nodes.append(new_node)
 | 
						|
 | 
						|
    
 | 
						|
            
 |