Menger sponge#
import k3d
import numpy as np
def iterate(length, x, y, z):
nl = length // 3
if nl < 1:
return
margin = (nl - 1) // 2
voxels[z - margin:z + margin + 1, y - margin:y + margin + 1, :] = 0
voxels[z - margin:z + margin + 1, :, x - margin:x + margin + 1] = 0
voxels[:, y - margin:y + margin + 1, x - margin:x + margin + 1] = 0
for ix, iy, iz in np.ndindex((3, 3, 3)):
if (1 if ix != 1 else 0) + (1 if iy != 1 else 0) + (1 if iz != 1 else 0) != 2:
iterate(nl, x + (ix - 1) * nl, y + (iy - 1) * nl, z + (iz - 1) * nl)
iteration = 4
size = 3 ** iteration
voxels = np.ones((size, size, size))
iterate(size, size // 2, size // 2, size // 2)
plt_voxels = k3d.voxels(voxels.astype(np.uint8),
color_map=(0xfdfe03), outlines=True)
plot = k3d.plot(grid_visible=False,
camera_auto_fit=False)
plot += plt_voxels
plot.display()
plot.camera = [98.5152, -60.0912, 88.9902,
43.4731, 37.6014, 31.5219,
-0.2226, 0.3405, 0.9135]
K3D panel
Controls
Full screen
cameraAutoFit
gridAutoFit
gridVisible
fpsMeter
Mode
Camera
Manipulate mode
FOV
voxelColor
lighting
time
fps
Clipping planes
Objects
Voxels #1
opacity
outlines
outlines_color
visible
wireframe
Info
Js version: