kopia lustrzana https://github.com/villares/sketch-a-day
				
				
				
			
			
			
			
				main
			
			
		
		
							rodzic
							
								
									51c62edcaa
								
							
						
					
					
						commit
						813f1bbe5b
					
				
										
											Plik binarny nie jest wyświetlany.
										
									
								
							| Po Szerokość: | Wysokość: | Rozmiar: 987 KiB | 
|  | @ -0,0 +1,96 @@ | |||
| 
 | ||||
| from random import choice | ||||
| from villares.line_geometry import Line, point_in_screen | ||||
| 
 | ||||
| def setup(): | ||||
|     size(400, 400) | ||||
|     generate_lines() | ||||
| 
 | ||||
| def generate_lines(): | ||||
|     global glines | ||||
|     rw = lambda: choice(range(-width / 2, width / 2, 10)) | ||||
|     # step = lambda n: n + choice((-21, 5)) | ||||
|     step = lambda n: n + choice((-5,-15)) | ||||
| 
 | ||||
|     glines = [] | ||||
|     while len(glines) < 100: | ||||
|         xa, ya = rw() ,rw() | ||||
|         xb, yb = step(xa), step(ya) | ||||
|         gl = GrowingLine((xa, ya), (xb, yb)) | ||||
|         for other_gl in glines: | ||||
|             if len(set((gl.a, gl.b, other_gl.a, other_gl.b))) < 4: | ||||
|                 break | ||||
|             if  gl.intersect(other_gl): | ||||
|                 break | ||||
|         else: | ||||
|             glines.append(gl) | ||||
| 
 | ||||
| def draw(): | ||||
|     translate(width / 2, height / 2) | ||||
|     # rotate(radians(13)) | ||||
|     background(0) | ||||
|     for gl in glines: | ||||
|         for other_gl in glines: | ||||
|             gl.check_collision(other_gl) | ||||
|         strokeWeight(2) | ||||
|         gl.stroke_from_growth() | ||||
|         gl.draw() | ||||
|         gl.check_screen_limit() | ||||
|         gl.grow() | ||||
| 
 | ||||
| def keyPressed(): | ||||
|     if key == ' ': | ||||
|         generate_lines() | ||||
| 
 | ||||
| class GrowingLine(Line): | ||||
| 
 | ||||
|     def __init__(self, *args): | ||||
|         Line.__init__(self, *args) | ||||
|         self.grow_a = True | ||||
|         self.grow_b = True | ||||
| 
 | ||||
|     def stroke_from_growth(self): | ||||
|         colorMode(HSB) | ||||
|         stroke(map(self.dist(), 0, height * .75, 0, 256), | ||||
|                255 - 128 * self.grow_a, | ||||
|                255 - 128 * self.grow_b) | ||||
|         # stroke(200 * self.grow_a, 128, 200 * self.grow_b) | ||||
| 
 | ||||
|     def grow(self): | ||||
|         v = PVector(*self.a) - PVector(*self.b) | ||||
|         v.normalize() | ||||
|         # noStroke() | ||||
|         # fill(0, 255, 200) | ||||
|         r = PVector() #.random2D() | ||||
|         if self.grow_a: | ||||
|             self.a += v + r | ||||
|         # else: | ||||
|         #     circle(self.a.x, self.a.y, 3) | ||||
|         if self.grow_b: | ||||
|             self.b -= v + r | ||||
|         # else: | ||||
|         #     circle(self.b.x, self.b.y, 3) | ||||
| 
 | ||||
|     def check_collision(self, other): | ||||
|         if self != other: | ||||
|             if self.grow_a and other.contains_point(self.a.x, | ||||
|                                                     self.a.y, | ||||
|                                                     tolerance=0.1): | ||||
|                 self.grow_a = False | ||||
|                 # glines.remove(other) | ||||
|                 # glines.append(GrowingLine(self.a, other.b)) | ||||
|             if self.grow_b and other.contains_point(self.b.x, | ||||
|                                                     self.b.y, | ||||
|                                                     tolerance=0.1): | ||||
|                 self.grow_b = False | ||||
|                 # if other in glines: glines.remove(other) | ||||
|                 # glines.append(GrowingLine(other.a, self.b)) | ||||
|         # else: | ||||
|         #     glines.remove(self) | ||||
| 
 | ||||
|     def check_screen_limit(self): | ||||
|         sp = lambda p: PVector(screenX(p.x, p.y), screenY(p.x, p.y)) | ||||
|         if self.grow_a and not point_in_screen(sp(self.a)): | ||||
|             self.grow_a = False | ||||
|         if self.grow_b and not point_in_screen(sp(self.b)): | ||||
|             self.grow_b = False | ||||
|  | @ -26,6 +26,12 @@ Here are listed some of the tools I have been using: | |||
| 
 | ||||
| --- | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| [sketch_2020_10_19a](https://github.com/villares/sketch-a-day/tree/master/2020/sketch_2020_10_19a) [[Py.Processing](https://villares.github.io/como-instalar-o-processing-modo-python/index-EN)] | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| [sketch_2020_10_18b](https://github.com/villares/sketch-a-day/tree/master/2020/sketch_2020_10_18b) [[Py.Processing](https://villares.github.io/como-instalar-o-processing-modo-python/index-EN)] | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Alexandre B A Villares
						Alexandre B A Villares