Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- def onCook(scriptOp):
- scriptOp.clear()
- # 16 vertices of tesseract
- verts = []
- for i in range(16):
- x = -1 if (i & 1) == 0 else 1
- y = -1 if (i & 2) == 0 else 1
- z = -1 if (i & 4) == 0 else 1
- w = -1 if (i & 8) == 0 else 1
- verts.append(np.array([x,y,z,w], dtype=float))
- t = absTime.seconds
- # 4D rotation
- def rotate4d(v, a, b, angle):
- r = np.copy(v)
- c = np.cos(angle)
- s = np.sin(angle)
- r[a] = v[a]*c - v[b]*s
- r[b] = v[a]*s + v[b]*c
- return r
- projected = []
- for v in verts:
- v = rotate4d(v, 0, 3, t*0.7)
- v = rotate4d(v, 1, 2, t*0.5)
- # 4D -> 3D projection
- dist = 4
- w = 1 / (dist - v[3])
- p3 = v[:3] * w * 1.5
- projected.append(p3)
- # Create points
- pts = []
- for p in projected:
- pt = scriptOp.appendPoint()
- pt.x = p[0]
- pt.y = p[1]
- pt.z = p[2]
- pts.append(pt)
- # Create edges
- for i in range(16):
- for j in range(i+1,16):
- diff = bin(i ^ j).count("1")
- if diff == 1:
- poly = scriptOp.appendPoly(2, closed=False)
- poly[0].point = pts[i]
- poly[1].point = pts[j]
- return
Advertisement
Add Comment
Please, Sign In to add comment