Danzer Configuration

Author

Eric W. Weisstein
May 22, 2026

This notebook downloaded from https://mathworld.wolfram.com/notebooks/Configurations/DanzerConfiguration.nb.

For more information, see Eric's MathWorld entry https://mathworld.wolfram.com/DanzerConfiguration.html.

©2026 Wolfram Research, Inc. except for portions noted otherwise

Source

https://arxiv.org/pdf/1301.1067.pdf

Circular lines

21/.Import["https://arxiv.org/pdf/1301.1067.pdf","EmbeddedImages"]

Overlapping 7-fold

Import["/Users/eww/Downloads/1301.1067/DanzerCfgSym.pdf"][[1]]

Pseudo 7-fold

img=Import["/Users/eww/Downloads/1301.1067/DanzerCfgSymA.pdf"][[1]]

img=;

img2=ColorNegate@Binarize@img

Length[lines=ImageLines[Binarize@img2,.2,Method->{"Hough","Segmented"->True},MaxFeatures->Automatic]]//Timing

Graphics/@lines

Graphics[lines]

Graphics[{Thickness[.01],MapIndexed[{RandomColor[],#}&,lines]}]

lines2=lines/.Line[l_]:>Line[l[[1,{1,-1}]]]

lines2/.Line[l_]:>EuclideanDistance@@l

lines3=Select[lines2,EuclideanDistance@@#[[1]]>100&]

Length[lines3]

Graphics[lines3]

pts={{657.205426914905`,744.3232024835472`},{723.1265079765204`,655.1477730478455`},{469.1112391515718`,633.3095897600523`},{689.865497497209`,536.9161294265868`},{782.7343440527205`,585.740808025024`},{672.6205480931974`,426.79558133338946`},{595.4841729986675`,463.3178723773593`},{508.0710504519427`,423.64233490751883`},{407.4777629730994`,555.2549244858255`},{492.14951924808236`,522.0209225412111`},{608.326731247074`,807.5483992238428`},{743.5922251431451`,748.5482551783243`},{544.1071878713673`,711.1009218209834`},{446.37680507040216`,716.2730562154521`},{265.07526378335547`,615.8553242121391`},{284.1432892794122`,725.7800604287836`},{408.5851128956749`,883.4288774549639`},{499.81994310202015`,938.7693650490435`},{694.207119449746`,926.8113363119626`},{769.6824696604126`,887.9257984820083`},{905.5151427851199`,764.4292735801394`},{928.2360725989411`,679.9330727806868`},{901.2950592387193`,436.336346215092`},{836.0626958118764`,357.4984334346534`},{641.1353487702113`,259.9368539755444`},{550.1638517771615`,256.3852316628936`},{366.0736792826533`,362.39373034847824`},{315.68925780546647`,420.6916524918755`},{608.6440815297633`,84.48266045039054`},{1035.9191004357376`,283.1304331465624`},{1120.2600021606827`,693.1199898464795`},{807.1365551514277`,1112.1574056698796`},{339.5918110122799`,1125.6279123499905`},{76.98782815369657`,695.2806726222367`},{206.96640138283695`,236.60147999736728`}};

Length[pts]

Graph[Range@Length@pts,{},VertexCoordinates->pts/700,VertexLabels->Automatic]

(lines=ResourceFunction["FindExtraordinaryLines"][pts])//Timing

Construction

From Ed Pegg, Jr.
Dec 12 2023

Six points on an ellipse:

six={{-2,3},{0,3},{2,4},{-5,6},{-5,18},{8,19}};
Graphics[{Point[six], ContourPlot[78+9 \[FormalX]+3 (\[FormalX]^2)-29 \[FormalY]-\[FormalX] \[FormalY]+(\[FormalY]^2)==0,{\[FormalX],-7,9},{\[FormalY],2,20}][[1]]}]

The 20 Steiner points and 15 Salmon points for the six points above:

p35={{-(617/1075),(1056/215)},{(223/231),(16/33)},{-(536/677),(3401/677)},{-(254/83),(127/415)},{-(3400/5971),(3649/853)},{-(310/127),(151/127)},{-(1390/887),(4143/887)},{(146/129),(5/129)},{-(160/153),(899/153)},{-(760/221),-(177/221)},{-(5792/7765),(7563/1553)},{-(136/1283),(561/1283)},{-(815/689),(3992/689)},{(1555/71),-(472/71)},{-(302/449),(2117/449)},{(206/25),(101/125)},{-(2110/5427),(22331/5427)},{(24400/5221),(11553/5221)},{(10/31),(159/31)},{(16/19),(15/19)},

{(521210/75847),(53551/75847)},{-(2230/2713),(9469/2713)},{-(39880/101069),(495927/101069)},{-(49570/121207),(833491/121207)},{-(8650/421),-(563/421)},{-(38420/11051),(86183/11051)},{-(300730/291013),(1408429/291013)},{(10510/10183),(4899/10183)},{-(19915/16567),(77146/16567)},{(290/1153),(4549/1153)},{(16610/66839),(350607/66839)},{-(29335/80851),(45238/80851)},{-(369680/134633),(45179/134633)},{(46070/17449),(6817/17449)},{-(31946/48959),(238907/48959)}};

The 20 Cayley lines and 15 Plücker lines:

lin=ResourceFunction["FindExtraordinaryLines"][p35]

Hessian line versions:

cayley=;
plucker=;

The Danzer (Subscript[35, 4]) configuration:

Graphics[{{Cyan,Line[p35[[#]]]&/@lin}, Point[p35]}, PlotRange->{{-8,11},{-2,8}}]

With the ellipse added:

Graphics[{{Cyan,Line[p35[[#]]]&/@lin}, Point[p35],
Red,Point[six], ContourPlot[78+9 \[FormalX]+3 (\[FormalX]^2)-29 \[FormalY]-\[FormalX] \[FormalY]+(\[FormalY]^2)==0,{\[FormalX],-7,9},{\[FormalY],2,20}][[1]]}, PlotRange->{{-8,11},{-2,8}}]

The 95 lines (60 pascal, 20 cayley, 15 plucker) and 95 points (60 kirkman, 20 steiner, 15 salmon):

hm=;

The corresponding labels for each line L*.  Also, the corresponding labels for each point P*.

{{"123456","123465","123546","123564","123645","123654","124356","124365","124536","124563","124635","124653","125346","125364","125436","125463","125634","125643","126345","126354","126435","126453","126534","126543","132456","132465","132546","132564","132645","132654","134256","134265","134526","134625","135246","135264","135426","135624","136245","136254","136425","136524","142356","142365","142536","142635","143256","143265","143526","143625","145236","145326","146235","146325","152346","152436","153246","153426","154236","154326"},{"123.456","123.465","124.356","124.365","125.346","125.364","126.345","126.354","134.256","134.265","135.246","135.264","136.245","136.254","145.236","145.263","146.235","146.253","156.234","156.243"},{"12.34.56","12.35.46","12.36.45","13.24.56","13.25.46","13.26.45","14.23.56","14.25.36","14.26.35","15.23.46","15.24.36","15.26.34","16.23.45","16.24.35","16.25.34"}}

Basically, the Hexagrammum Mysticum is a big mess. Usually, I can make objects look nice, as can Tomaz Pisanski, but that seems elusive for this monster.

points=p35

points={{-(617/1075),(1056/215)},{(223/231),(16/33)},{-(536/677),(3401/677)},{-(254/83),(127/415)},{-(3400/5971),(3649/853)},{-(310/127),(151/127)},{-(1390/887),(4143/887)},{(146/129),(5/129)},{-(160/153),(899/153)},{-(760/221),-(177/221)},{-(5792/7765),(7563/1553)},{-(136/1283),(561/1283)},{-(815/689),(3992/689)},{(1555/71),-(472/71)},{-(302/449),(2117/449)},{(206/25),(101/125)},{-(2110/5427),(22331/5427)},{(24400/5221),(11553/5221)},{(10/31),(159/31)},{(16/19),(15/19)},{(521210/75847),(53551/75847)},{-(2230/2713),(9469/2713)},{-(39880/101069),(495927/101069)},{-(49570/121207),(833491/121207)},{-(8650/421),-(563/421)},{-(38420/11051),(86183/11051)},{-(300730/291013),(1408429/291013)},{(10510/10183),(4899/10183)},{-(19915/16567),(77146/16567)},{(290/1153),(4549/1153)},{(16610/66839),(350607/66839)},{-(29335/80851),(45238/80851)},{-(369680/134633),(45179/134633)},{(46070/17449),(6817/17449)},{-(31946/48959),(238907/48959)}};

lines=lin

lines={{1,3,14,18},{1,6,10,15},{1,7,11,19},{1,29,31,35},{2,4,12,16},{2,5,13,20},{2,8,9,17},{2,28,32,34},{3,5,9,11},{3,8,15,20},{3,26,30,35},{4,6,17,19},{4,7,10,13},{4,25,32,33},{5,7,16,18},{5,26,27,34},{6,8,12,14},{6,24,29,33},{7,25,27,31},{8,24,28,30},{9,14,16,19},{9,23,30,34},{10,12,18,20},{10,22,31,33},{11,13,15,17},{11,23,27,35},{12,21,28,33},{13,22,27,32},{14,21,29,30},{15,22,24,35},{16,21,25,34},{17,23,24,32},{18,21,26,31},{19,23,25,29},{20,22,26,28}};

Length/@{points,lines}

ConfigurationDiagram[points,lines,2]

g=ConfigurationGraph[points,lines]

RecognizeGraph@g

lg=LeviGraph[lines]

RecognizeGraph@lg

Embeddings

<<MathWorld`Graphs`

Names

GraphData["DanzerConfigurationGraph","StandardName"]

GraphData["DanzerConfigurationGraph","StandardNames"]

Primary

GraphData["DanzerConfigurationGraph"]//StyleGraphs[#,ImageSize->Small]&

Configuration

GetGraphData["DanzerConfigurationGraph","File"]

GraphData["DanzerConfigurationGraph","Configuration"]

GraphData["DanzerConfigurationGraph","Graph","Configuration"]//StyleGraphs

config=%[[1]]

(alledges=AddAllConfigurationEdges[config])//Timing

RecognizeGraph@alledges

ConfigurationDiagram[config,.2]

lines=ConfigurationLines[config]

GraphData["DanzerConfigurationGraph","IncidenceLines"]

r=LeviGraph[lines]//RecognizeGraph

GraphData["DanzerConfigurationGraph","LeviGraph","Name"]

FirstCase[GraphData[r,"StandardNames"],{"Incidence",_}]

Cases[GraphData["DanzerConfigurationGraph","StandardNames"],_String?(StringMatchQ[#,"*Configuration*"]&)]

GraphData["DanzerConfigurationGraph","OrdinaryLineGraphName"]

(ordinarylinegraph=OrdinaryLineGraph[config])//Timing

RecognizeGraph@ordinarylinegraph

ConfigurationXXX

GraphData["DanzerConfigurationGraph","Graph","Configuration"]//StyleGraphs

config=%[[1]]

AddAllConfigurationEdges[config]//RecognizeGraph

ConfigurationDiagram[config,2,VertexLabels->None]

lines=ConfigurationLinesFromGraph[config]

r=LeviGraph[lines]//RecognizeGraph

FirstCase[GraphData[r,"StandardNames"],{"Incidence",_}]

All

GraphData["DanzerConfigurationGraph","Graph","All"]//StyleGraphs

Inexact

Select[GraphData["DanzerConfigurationGraph","Graph","All"],(!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&)]//StyleGraphs

Embedding types

GraphDataEmbeddings[GraphData["DanzerConfigurationGraph","EdgeList"]]

Default embedding

GraphPlot@GraphData["DanzerConfigurationGraph","Edges"]

v={};
g=Graph[Range[Length[v]],UndirectedEdge@@@{},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

Degenerate

GraphData["DanzerConfigurationGraph","Graph","Degenerate"]//StyleGraphs

DegenerateGraphEmbeddingTypes/@GraphData["DanzerConfigurationGraph","Graph","Degenerate"]

Perspective

GraphData["DanzerConfigurationGraph","Graph","Perspective"]//StyleGraphs

Bilateral

GraphData["DanzerConfigurationGraph","Graph","Bilateral"]//StyleGraphs

Circular

GraphData["DanzerConfigurationGraph","Graph","Circular"]//StyleGraphs

Circular construction

GraphData["DanzerConfigurationGraph","HamiltonianCycleCount"]

Length[hc=FindHamiltonianCycle[GraphData["DanzerConfigurationGraph"],10^3][[All,All,1]]]//Timing

circ=CircularEmbeddingFromHamiltonianCycle[GraphData["DanzerConfigurationGraph"],#]&/@hc;

Length[bilat=DeleteDuplicatesBy[
DeleteMissing[BilaterallyRotatedGraph/@circ],
CircularCanonicalGraphEmbedding]]//Timing

gs=bilat

Length[quad=DeleteDuplicatesBy[Union@Select[bilat,BilateralGraphEmbeddingQ[#,Axis->"X"]&],CircularCanonicalGraphEmbedding[#,4]&]]

quad

Planar

GraphData["DanzerConfigurationGraph","Planar"]

GraphData["DanzerConfigurationGraph","Graph","Planar"]//StyleGraphs

MinimalCrossing

GraphData["DanzerConfigurationGraph",{"RCN","CN"}]

GraphData["DanzerConfigurationGraph","Graph","MinimalCrossing"]//StyleGraphs

MinimalCrossing construction

(cn=CrossingNumber[GraphData["DanzerConfigurationGraph"],TimeConstraint->1])//AbsoluteTiming

(cn=CrossingNumber[GraphData["DanzerConfigurationGraph"],TimeConstraint->10])//AbsoluteTiming

(cn=CrossingNumber[GraphData["DanzerConfigurationGraph"],TimeConstraint->60])//AbsoluteTiming

(cn=CrossingNumber[GraphData["DanzerConfigurationGraph"],TimeConstraint->3600])//AbsoluteTiming

(g=MinimalCrossingGraph[GraphData["DanzerConfigurationGraph"],"CrossingNumber"->cn])//PolyhedralGraphQ

faces=ReverseSort@SymmetricallyDistinctFaces[g]

Tally[ReverseSort[Length/@faces]]

IGLayoutTutte[g,"OuterFace"->#]&/@faces

Union[Select[Table[RotateGraph[MinimalCrossingGraph[GraphData["DanzerConfigurationGraph"],"CrossingNumber"->cn,RandomSeed->n]],{n,50}],Max[OuterFace[#]]<=GraphData["DanzerConfigurationGraph","V"]&]]//Timing

Table[MinimalCrossingGraph[GraphData["DanzerConfigurationGraph"],"CrossingNumber"->cn,RandomSeed->i],{i,50}]//Union//Timing

v={};
g=Graph[Range[Length[v]],UndirectedEdge@@@{},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

RectilinearCrossingCount[g]

Circulant

GraphData["DanzerConfigurationGraph","Circulant"]

GraphData["DanzerConfigurationGraph","Graph","Circulant"]//StyleGraphs

Complement graph

GraphData["DanzerConfigurationGraph","ComplementGraph","Name"]

Line graph

GraphData["DanzerConfigurationGraph","Line"]

LineGraphQ[GraphData["DanzerConfigurationGraph"]]//Timing

RootGraph

Select[GraphData[All],GraphData[#,"LineGraph","Name"]=== "DanzerConfigurationGraph"&]

RootGraph[GraphData["DanzerConfigurationGraph"]]

Halin

GraphData["DanzerConfigurationGraph","Halin"]

GraphData["DanzerConfigurationGraph","Graph","Halin"]//StyleGraphs

Rigid

GraphData["DanzerConfigurationGraph","Rigid"]

GraphData["DanzerConfigurationGraph","Graph","Rigid"]//StyleGraphs

Flexible

GraphData["DanzerConfigurationGraph","Flexible"]

GraphData["DanzerConfigurationGraph","Graph","Flexible"]//StyleGraphs

LCF

GraphData["DanzerConfigurationGraph","LCF"]

GraphData["DanzerConfigurationGraph","HamiltonianCycleCount"]

GraphData["DanzerConfigurationGraph","LCFSignature"]

GraphData["DanzerConfigurationGraph","LCFNotations"]

GraphData["DanzerConfigurationGraph","Graph","LCF"]//StyleGraphs

Tally[LCFNotation[#][[2]]&/@%]

UnitDistance

GraphData["DanzerConfigurationGraph","UnitDistance"]

UnitDistanceGraphQ[GraphData["DanzerConfigurationGraph"],Debug->True]//Timing

GraphData["DanzerConfigurationGraph","Graph","UnitDistance"]//StyleGraphs

UnitDistance by refinement

UnitDistanceEmbeddingRefine[Graph[GraphData["DanzerConfigurationGraph","VertexList"],GraphData["DanzerConfigurationGraph","EdgeList"]],MaxIterations->500]

UnitDistanceGraphEmbeddingQ[%]

UnitDistanceEmbeddingRefine[Annotate[#,VertexCoordinates->N[GraphEmbedding[#]]],MaxIterations->500]&/@Complement@@(GraphData["DanzerConfigurationGraph","Graph",#]&/@{"All","UnitDistance"})

Select[%,UnitDistanceGraphEmbeddingQ]

UnitDistance by FindUnitDistanceEmbedding

FindUnitDistanceEmbedding[GraphData["DanzerConfigurationGraph"],MaxIterations->5000,"ReturnWithMessage"->True]//Timing

FindUnitDistanceEmbedding[GraphData["DanzerConfigurationGraph"],MaxIterations->5000,"ReturnWithMessage"->False]//Quiet//Timing

Matchstick

GraphData["DanzerConfigurationGraph","Matchstick"]

GraphData["DanzerConfigurationGraph","Graph","Matchstick"]//StyleGraphs

3D default

Graph3D[GraphData["DanzerConfigurationGraph","Edges"]]

3D All

GraphData["DanzerConfigurationGraph","Graph",{"3D","All"}]

3D UnitDistance

GraphData["DanzerConfigurationGraph","Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData["DanzerConfigurationGraph","Polyhedral"]

GraphData["DanzerConfigurationGraph","Graph",{"3D","Polyhedron"}]

GraphData

GraphDataScraping

<<MathWorld`Graphs`

file=OpenWrite["~/danzer.m"]

WriteString[file,GraphDataString[,
"StandardName"->"DanzerConfigurationGraph",
"Name"->"Danzer configuration graph",
"Information"->"DanzerConfiguration",
"Skip"->{"ABCEnergy","ABCSpectralRadius","ArithmeticGeometricEnergy","ArithmeticGeometricSpectralRadius","ConnectedInducedSubgraphPolynomial","ConstructionNumber","CyclicEdgeConnectivity","LinklesslyEmbeddable","MatchingGeneratingPolynomial","MaximumIndependentEdgeSetCount","MaximumIndependentEdgeSets","MinimumCoveringsByMaximalCliques","MinimumCyclicEdgeCut","MinimumCyclicEdgeCuts","MinimumEdgeCuts","MinimumWeightFractionalEdgeColoring","Minors","ProjectivePlanar",
"QuadraticEmbeddingConstant" ,(* crashes *)
"RandicEnergy","RandicSpectralRadius","SomborSpectralRadius","TuttePolynomial"}
]]

Close[file]