Alexandre B A Villares 2018-01-14 16:24:22 -02:00
rodzic 03ad723d15
commit e8f4e51fca
4 zmienionych plików z 158 dodań i 1 usunięć

Wyświetl plik

@ -4,9 +4,13 @@
Hi! I'm [Alexandre Villares](https://abav.lugaralgum.com), let's see if I can make one small program (*sketch*) a day.
![s180114](sketch_180114a/sketch_180114a.png)
013: [sketch_180114a](https://github.com/villares/sketch-a-day/tree/master/sketch_180114a) [[Py.Processing](https://villares.github.io/como-instalar-o-processing-modo-python/index-EN)] Another 3D Graph
![sketch_180113a](sketch_180113a/sketch_180113a.png)
013: [sketch_180113a](https://github.com/villares/sketch-a-day/tree/master/sketch_180113a) [[Py.Processing](https://villares.github.io/como-instalar-o-processing-modo-python/index-EN)] 3D Graph
013: [s180113](https://github.com/villares/sketch-a-day/tree/master/sketch_180113a) [[Py.Processing](https://villares.github.io/como-instalar-o-processing-modo-python/index-EN)] 3D Graph
![s180112](s180112/s180112.png)

Wyświetl plik

@ -0,0 +1,2 @@
mode=Python
mode.id=jycessing.mode.PythonMode

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 124 KiB

Wyświetl plik

@ -0,0 +1,151 @@
"""
s180114 3D Graphs!
(c)2018 Alexandre B A Villares
https://abav.lugaralgum.com/sketch-a-day
"""
add_library('peasycam')
import random as rnd
CEL_SIZE = 100
HALF_CEL = CEL_SIZE / 2
CELLS = []
Z_INC = 20
def setup():
global ROWS, COLS, CELLS # filas e colunas
size(500, 500, P3D)
ROWS, COLS = int(height / CEL_SIZE), int(width / CEL_SIZE)
rectMode(CENTER)
colorMode(HSB)
cam = PeasyCam(this, 500)
grid(CELLS, Circle, ROWS, COLS)
def draw():
global ANG, mm
mm = 1
background(255)
for c in CELLS:
c.update()
#c.showEdges()
if c.isOn(mouseX, mouseY):
c.sub()
def grid(list, func, num_rows, num_cols):
for r in range(num_rows):
for c in range(num_cols):
with pushMatrix():
list.append(func(HALF_CEL + c * CEL_SIZE,
HALF_CEL + r * CEL_SIZE)
)
def keyPressed():
global CELLS
if key == ' ':
CELLS = []
grid(CELLS, Circle, ROWS, COLS)
class Circle:
def __init__(self, x, y, s=CEL_SIZE, c=color(255, 200, 200)):
self.edges = set()
self.x = x
self.y = y
self.ix = x
self.iy = y
self.s = s
self.b = 12
self.ncol = color(random(256), 200, 200)
self.col = c
self.z = 0
print COLS * ROWS, len(CELLS)
if 1 < len(CELLS) < 26 and random(10) < 5:
self.edges.add(rnd.choice(CELLS))
def mouseMovement(self):
mx, my = mouseX, mouseY
cx = self.x
cy = self.y
maxDist = 50
dis = dist(cx, cy, mx, my)
ang = atan2(cy - my, cx - mx)
if (dis < maxDist):
dd = map(dis, 0, maxDist, 1, 0)
dd = pow(dd, 0.9) * 20 * mm
self.x += cos(ang) * dd
self.y += sin(ang) * dd
def update(self):
self.x = lerp(self.x, self.ix, 0.09)
self.y = lerp(self.y, self.iy, 0.09)
self.col = lerpColor(self.col, self.ncol, 0.05)
with pushMatrix():
translate(-width/2, -height/2)
self.mouseMovement()
self.showShadow()
self.show()
self.showEdges()
def showShadow(self):
# noStroke()
fill(0, 20)
stroke(self.col)
ellipse(self.x, self.y, self.s, self.s)
def showEdges(self):
strokeWeight(3)
stroke(0)
for e in self.edges:
line(self.x, self.y, self.z, e.x, e.y, e.z)
def show(self):
noStroke()
fill(0)
pushMatrix()
translate(self.x, self.y, self.z)
sphere(self.b/2)
#ellipse(self.x, self.y, self.b, self.b)
popMatrix()
def isOn(self, mx, my):
return dist(self.x, self.y, mx, my) < self.s / 2
def sub(self):
ms = self.s * 0.5
mms = ms / 2
c0 = Circle(self.ix - mms, self.iy + mms, ms, self.col)
c0.edges = self.edges
c0.z = self.z + Z_INC
# replace egges from any child
for c in CELLS:
if self in c.edges:
c.edges.remove(self)
c.edges.add(c0)
CELLS.append(c0)
c1 = Circle(self.ix - mms, self.iy - mms, ms, self.col)
c1.x += self.x - self.ix
c1.y += self.y - self.iy
c1.z = self.z + Z_INC
c1.edges.add(c0)
CELLS.append(c1)
c2 = Circle(self.ix + mms, self.iy - mms, ms, self.col)
c2.x += self.x - self.ix
c2.y += self.y - self.iy
c2.z = self.z + Z_INC
c2.edges.add(c0)
CELLS.append(c2)
c3 = Circle(self.ix + mms, self.iy + mms, ms, self.col)
c3.x += self.x - self.ix
c3.y += self.y - self.iy
c3.z = self.z + Z_INC
c3.edges.add(c0)
CELLS.append(c3)
CELLS.remove(self)