File:Double six.svg
Summary
| Description |
English: Schläfli's double six configuration — twelve lines with five intersection points per line and two lines per intersection point, intersecting in the pattern of a crown graph — inscribed on a cube, following an illustration by Hilbert and Cohn-Vossen in Geometry and the Imagination. |
| Date | |
| Source | Own work |
| Author | David Eppstein |
| Other versions |
|
| SVG development |
Source code
The basic geometry of this image was created with the following Python script (much of which was copied from the one used for 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")
Licensing
| I, the copyright holder of this work, release this work into the public domain. This applies worldwide. In some countries this may not be legally possible; if so: I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law. |