Whistle
Script
xmin = 0.01
xmax = 5
ymin(x) = 0
ymax(x) = 3
zmin(x, y) = If(0 ≤ x ≤ 2, -sqrt(1 - (x - 1)²) - 1, log(10, x - 1.9) - 0.1)
zmax(x, y) = log(10, x + 0.1)
Ly(x) = x ymin(xmin) + (1 - x) ymax(xmin)
Lz(x, y) = y zmin(xmin, x * ymin(xmin) + (1 - x) ymax(xmin)) + (1 - y) zmax(xmin, x * ymin(xmin) + (1 - x) ymax(xmin))
left = Surface(xmin, Ly(u), Lz(u, v), u, 0, 1, v, 0, 1)
RY(x) = x * ymin(xmax) + (1 - x) ymax(xmax)
RZ(x, y) = y * zmin(xmax, x * ymin(xmax) + (1 - x) ymax(xmax)) + (1 - y) zmax(xmax, x * ymin(xmax) + (1 - x) ymax(xmax))
right = Surface(xmax, RY(u), RZ(u, v), u, 0, 1, v, 0, 1)
Fx(x) = x / 3 xmin + (1 - x / 3) xmax
Fy(x) = ymin(x / 3 xmin + (1 - x / 3) xmax)
Fz(x, y) = y / 3 zmin(x / 3 xmin + (1 - x / 3) xmax, ymin(x / 3 xmin + (1 - x / 3) xmax)) + (1 - y / 3) zmax(x / 3 xmin + (1 - x / 3) xmax, ymin(x / 3 xmin + (1 - x / 3) xmax))
front = Surface(Fx(u), Fy(u), Fz(u,v), u, 0, 3, v, 0, 3)
Ux(x) = x / 3 xmin + (1 - x / 3) xmax
Uy(x, y) = y / 3 ymax(x / 3 xmin + (1 - x / 3) xmax) + (1 - y / 3) ymin(x / 3 xmin + (1 - x / 3) xmax)
Uz(x, y) = zmax(x / 3 xmin + (1 - x / 3) xmax, y / 3 ymax(x / 3 xmin + (1 - x / 3) xmax) + (1 - y / 3) ymin(x / 3 xmin + (1 - x / 3) xmax))
up = Surface(Ux(u), Uy(u, v), Uz(u, v), u, 0, 3, v, 0, 3)
Bx(x) = x / 3 xmin + (1 - x / 3) xmax
By(x) = ymax(x / 3 xmin + (1 - x / 3) xmax)
Bz(x, y) = y / 3 zmin(x / 3 xmin + (1 - x / 3) xmax, ymax(x / 3 xmin + (1 - x / 3) xmax)) + (1 - y / 3) zmax(x / 3 xmin + (1 - x / 3) xmax, ymax(x / 3 xmin + (1 - x / 3) xmax))
back = Surface(Bx(u), By(u), Bz(u, v), u, 0, 3, v, 0, 3)
Dx(x) = x / 3 xmin + (1 - x / 3) xmax
Dy(x, y) = y / 3 ymax(x / 3 xmin + (1 - x / 3) xmax) + (1 - y / 3) ymin(x / 3 xmin + (1 - x / 3) xmax)
Dz(x, y) = zmin(x / 3 xmin + (1 - x / 3) xmax, y / 3 ymax(x / 3 xmin + (1 - x / 3) xmax) + (1 - y / 3) ymin(x / 3 xmin + (1 - x / 3) xmax))
down = Surface(Dx(u), Dy(u, v), Dz(u, v), u, 0, 3, v, 0, 3)
Original code by mathmagic. More examples here:
https://www.geogebra.org/m/jrmzqk5z