kopia lustrzana https://github.com/villares/sketch-a-day
94 wiersze
1.8 KiB
Python
94 wiersze
1.8 KiB
Python
"""
|
|
* 3D Knot (2017/Dec)
|
|
* Daniel Shiffman
|
|
* https://YouTu.be/r6YMKr1X0VA
|
|
*
|
|
* Mod GoToLoop (v1.0.3) (2018/Oct/16)
|
|
* https://OpenProcessing.org/sketch/608725 (pjs)
|
|
* https://OpenProcessing.org/sketch/608726 (p5js)
|
|
*
|
|
* https://Discourse.Processing.org/t/
|
|
* vertex-loop-and-draw-along-a-vertex-path/4545/4
|
|
"""
|
|
|
|
"""
|
|
* http://PaulBourke.net/geometry/knots/
|
|
* Knot 4 (1992/Oct):
|
|
*
|
|
* r(beta) = 0.8 + 1.6 * sin(6 * beta)
|
|
* theta(beta) = 2 * beta
|
|
* phi(beta) = 0.6 * pi * sin(12 * beta)
|
|
*
|
|
* x = r * cos(phi) * cos(theta)
|
|
* y = r * cos(phi) * sin(theta)
|
|
* z = r * sin(phi)
|
|
"""
|
|
|
|
ANGLE_STEP, BETA_STEP = .02, .01
|
|
MAG, SEGS_LIMIT = 100.0, PI + BETA_STEP
|
|
PI_DOT_6 = PI * .6
|
|
|
|
angle = beta = 0.0
|
|
paused = False
|
|
|
|
knots = []
|
|
|
|
def setup():
|
|
size(600, 600, P3D)
|
|
smooth(8)
|
|
|
|
colorMode(HSB)
|
|
noFill()
|
|
strokeWeight(8.0)
|
|
|
|
|
|
def draw():
|
|
global angle, beta
|
|
|
|
background(0)
|
|
translate(width>>1, height>>1)
|
|
rotateY(angle)
|
|
angle += ANGLE_STEP
|
|
|
|
if beta <= SEGS_LIMIT:
|
|
addKnot()
|
|
beta += BETA_STEP
|
|
|
|
with beginShape():
|
|
for k in knots:
|
|
stroke(k.c)
|
|
vertex(k.v.x, k.v.y, k.v.z)
|
|
|
|
|
|
def mousePressed():
|
|
global paused
|
|
paused = not paused
|
|
noLoop() if paused else loop()
|
|
|
|
|
|
def keyPressed(): mousePressed()
|
|
|
|
|
|
def addKnot():
|
|
r = MAG * (.8 + 1.6 * sin(6 * beta))
|
|
theta = 2 * beta
|
|
phi = PI_DOT_6 * sin(12 * beta)
|
|
rCosPhi = r * cos(phi)
|
|
|
|
x = rCosPhi * cos(theta)
|
|
y = rCosPhi * sin(theta)
|
|
z = r * sin(phi)
|
|
|
|
knot = Knot(x, y, z)
|
|
knots.append(knot)
|
|
print '%d: %s' % (len(knots), knot)
|
|
|
|
|
|
class Knot:
|
|
def __init__(k, *vec):
|
|
k.v = vec[0] if len(vec) is 1 else PVector(*vec)
|
|
k.c = color(k.v.mag(), 255, 255)
|
|
|
|
|
|
def __str__(k): return 'Vec: %s \tHSB: %d' % (k.v, k.c)
|