The basic geometry of this image was created with the following Python script (much of which was copied from the one used for File:Gray configuration.svg). The transparency effects were added afterwards, using Adobe Illustrator.
from pyx import canvas,path,color
from math import sqrt,tan,asin
pov = (-22.7,7.1,9.3)
x,y,z = 2,1,0
radius = 0.12
scale = 10.0
g = 2.0
h = 2.5
vertexColor = [color.rgb.red]
edgeColor = [color.rgb.black]
cubeColor = [color.rgb.blue]
def distance(p,q):
return sqrt(sum([(p[i]-q[i])**2 for i in (x,y,z)]))
def perspective(loc):
dz = loc[z]-pov[z]
return (loc[x]-pov[x])*scale/dz, (loc[y]-pov[y])*scale/dz
def vertex(p):
lx,ly = perspective(p)
prad = scale*1.1*tan(asin(radius/(distance(p,pov))))
c.fill(path.circle(lx,ly,prad),vertexColor)
def edge(p,q):
lx1,ly1 = perspective(p)
lx2,ly2 = perspective(q)
c.stroke(path.line(lx1,ly1,lx2,ly2),edgeColor)
def cube(p,q):
lx1,ly1 = perspective(p)
lx2,ly2 = perspective(q)
c.stroke(path.line(lx1,ly1,lx2,ly2),cubeColor)
c = canvas.canvas()
def transform(point,spin,flip,mirror,turn):
x,y,z = point
if mirror:
x,y,z = y,x,z
if turn:
x,y,z = -x,-y,z
if flip:
x,y,z = -y,x,-z
for i in range(spin):
x,y,z = y,z,x
return x,y,z
points = set()
lines = set()
for s in (0,1,2):
for f in (0,1):
points.add(transform((0,0,g),s,f,0,0))
for m in (0,1):
for t in (0,1):
points.add(transform((g,g/h,g),s,f,m,t))
points.add(transform((g*h,g,g),s,f,m,t))
lines.add((transform((g*h,g,g),s,f,m,0),
transform((-g*h,-g,g),s,f,m,0)))
for a in (-2,2):
for b in (-2,2):
cube((a,b,-2),(a,b,2))
cube((a,-2,b),(a,2,b))
cube((-2,a,b),(2,a,b))
for p,q in lines:
edge(p,q)
for p in points:
vertex(p)
c.writePDFfile("Double_six")