Reye Configuration

Author

Eric W. Weisstein
May 22, 2026

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

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

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

Construction

Original construction

Length[v={{460.156350453974`,86.54809969596795`},{648.0309050864188`,174.67494286437181`},{357.05868689675754`,215.83314737466458`},{543.9051527833656`,260.51457736226257`},{485.743053510471`,344.50596242943584`},{1072.2041494361094`,384.7862484601376`},{561.6021410824867`,415.9985607213812`},{436.6720311249185`,424.88170954776774`},{496.02394096883756`,446.4253669745699`},{376.1534138278588`,454.11870522993195`},{400.6542703438091`,873.8792540637843`},{7.924369434201765`,676.8443131903455`}}/1000]

Length[lines={{12,9,7},{12,10,8},{12,4,2},{12,3,1},{11,10,3},{10,9,6},{11,8,1},{1,2,6},{3,4,6},{3,5,7},{4,5,8},{1,5,9},{6,7,8},{11,7,2},{11,9,4},{2,5,10}}]

edges=Flatten[Partition[#,2,1]&/@lines,1];
g=Graph[Range[Length[v]],UndirectedEdge@@@Sort[Sort/@edges],VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph@LeviGraph[lines]

"ReyeGraph"

ConfigurationDiagram[v,lines,.1]

g=ConfigurationGraph[v,lines]

RecognizeGraph@g

Construction

Ed Pegg, Jr.
Dec 13, 2023

Quadratic

reyes={{0,0,0},{-1,-1,0},{3,-1,0},{(1/(Sqrt[2])),(1/(Sqrt[2])),0},{0,(1/17) (4+12 (Sqrt[2])),0},{(1/14) (6-9 (Sqrt[2])),(1/14) (-2+3 (Sqrt[2])),0},{0,(1/17) (-2+6 (Sqrt[2])),2},{0,(1/17) (-1+3 (Sqrt[2])),1},{(1/7) (-1+2 (Sqrt[2])),(1/119) (-11+50 (Sqrt[2])),(1/7) (6+2 (Sqrt[2]))},{0,(1/289) (-13+141 (Sqrt[2])),(1/17) (15+6 (Sqrt[2]))},{(1/47) (15-18 (Sqrt[2])),(1/799) (-91+222 (Sqrt[2])),(1/47) (42+6 (Sqrt[2]))},{0,(1/17) (-2+6 (Sqrt[2])),(1/137) (78+24 (Sqrt[2]))}};

lines=ResourceFunction["FindExtraordinaryLines"][reyes]

LeviGraph[lines]

RecognizeGraph@%

planes={{0,0,-1,0},{1,0,0,0},{(NumericalApproximation[Root, (RowDefault["0.418", FEExpressionsNumericalApproximationElider]), Root[1-68 ((#1)^2)+356 ((#1)^4)&,4], ]),(NumericalApproximation[Root, (RowDefault["-0.908", FEExpressionsNumericalApproximationElider]), Root[289-644 ((#1)^2)+356 ((#1)^4)&,2], ]),0,(NumericalApproximation[Root, (RowDefault["0.347", FEExpressionsNumericalApproximationElider]), Root[4-44 ((#1)^2)+89 ((#1)^4)&,3], ])},{0,(NumericalApproximation[Root, (RowDefault["0.643", FEExpressionsNumericalApproximationElider]), Root[289-1126 ((#1)^2)+1033 ((#1)^4)&,3], ]),(NumericalApproximation[Root, (RowDefault["-0.766", FEExpressionsNumericalApproximationElider]), Root[196-940 ((#1)^2)+1033 ((#1)^4)&,1], ]),(NumericalApproximation[Root, (RowDefault["0.643", FEExpressionsNumericalApproximationElider]), Root[289-1126 ((#1)^2)+1033 ((#1)^4)&,3], ])},{(NumericalApproximation[Root, (RowDefault["-0.701", FEExpressionsNumericalApproximationElider]), Root[289-1194 ((#1)^2)+1233 ((#1)^4)&,1], ]),(NumericalApproximation[Root, (RowDefault["0.701", FEExpressionsNumericalApproximationElider]), Root[289-1194 ((#1)^2)+1233 ((#1)^4)&,4], ]),(NumericalApproximation[Root, (RowDefault["-0.134", FEExpressionsNumericalApproximationElider]), Root[1-78 ((#1)^2)+1233 ((#1)^4)&,2], ]),0},{(NumericalApproximation[Root, (RowDefault["-0.311", FEExpressionsNumericalApproximationElider]), Root[289-6122 ((#1)^2)+32401 ((#1)^4)&,1], ]),(NumericalApproximation[Root, (RowDefault["-0.934", FEExpressionsNumericalApproximationElider]), Root[23409-55098 ((#1)^2)+32401 ((#1)^4)&,1], ]),(NumericalApproximation[Root, (RowDefault["0.178", FEExpressionsNumericalApproximationElider]), Root[81-3582 ((#1)^2)+32401 ((#1)^4)&,3], ]),0},{(NumericalApproximation[Root, (RowDefault["-0.289", FEExpressionsNumericalApproximationElider]), Root[289-15914 ((#1)^2)+149009 ((#1)^4)&,1], ]),(NumericalApproximation[Root, (RowDefault["-0.867", FEExpressionsNumericalApproximationElider]), Root[23409-143226 ((#1)^2)+149009 ((#1)^4)&,1], ]),(NumericalApproximation[Root, (RowDefault["0.405", FEExpressionsNumericalApproximationElider]), Root[18769-138878 ((#1)^2)+149009 ((#1)^4)&,3], ]),0},{(NumericalApproximation[Root, (RowDefault["0.671", FEExpressionsNumericalApproximationElider]), Root[23409-184842 ((#1)^2)+294817 ((#1)^4)&,4], ]),(NumericalApproximation[Root, (RowDefault["-0.671", FEExpressionsNumericalApproximationElider]), Root[23409-184842 ((#1)^2)+294817 ((#1)^4)&,1], ]),(NumericalApproximation[Root, (RowDefault["0.313", FEExpressionsNumericalApproximationElider]), Root[18769-219950 ((#1)^2)+294817 ((#1)^4)&,3], ]),0},{(NumericalApproximation[Root, (RowDefault["-0.565", FEExpressionsNumericalApproximationElider]), Root[289-47738 ((#1)^2)+146657 ((#1)^4)&,1], ]),(NumericalApproximation[Root, (RowDefault["-0.759", FEExpressionsNumericalApproximationElider]), Root[83521-229466 ((#1)^2)+146657 ((#1)^4)&,2], ]),(NumericalApproximation[Root, (RowDefault["-0.323", FEExpressionsNumericalApproximationElider]), Root[81-16110 ((#1)^2)+146657 ((#1)^4)&,1], ]),(NumericalApproximation[Root, (RowDefault["0.936", FEExpressionsNumericalApproximationElider]), Root[73984-212960 ((#1)^2)+146657 ((#1)^4)&,4], ])},{(NumericalApproximation[Root, (RowDefault["-0.458", FEExpressionsNumericalApproximationElider]), Root[289-57530 ((#1)^2)+267617 ((#1)^4)&,1], ]),(NumericalApproximation[Root, (RowDefault["-0.615", FEExpressionsNumericalApproximationElider]), Root[83521-321946 ((#1)^2)+267617 ((#1)^4)&,2], ]),(NumericalApproximation[Root, (RowDefault["-0.642", FEExpressionsNumericalApproximationElider]), Root[18769-155758 ((#1)^2)+267617 ((#1)^4)&,1], ]),(NumericalApproximation[Root, (RowDefault["0.759", FEExpressionsNumericalApproximationElider]), Root[73984-282592 ((#1)^2)+267617 ((#1)^4)&,4], ])},{(NumericalApproximation[Root, (RowDefault["0.899", FEExpressionsNumericalApproximationElider]), Root[23409-471258 ((#1)^2)+547057 ((#1)^4)&,4], ]),(NumericalApproximation[Root, (RowDefault["-0.403", FEExpressionsNumericalApproximationElider]), Root[83521-604010 ((#1)^2)+547057 ((#1)^4)&,2], ]),(NumericalApproximation[Root, (RowDefault["-0.172", FEExpressionsNumericalApproximationElider]), Root[81-18846 ((#1)^2)+547057 ((#1)^4)&,1], ]),(NumericalApproximation[Root, (RowDefault["0.497", FEExpressionsNumericalApproximationElider]), Root[73984-434912 ((#1)^2)+547057 ((#1)^4)&,3], ])},{(NumericalApproximation[Root, (RowDefault["0.840", FEExpressionsNumericalApproximationElider]), Root[23409-559386 ((#1)^2)+746353 ((#1)^4)&,4], ]),(NumericalApproximation[Root, (RowDefault["-0.376", FEExpressionsNumericalApproximationElider]), Root[83521-696490 ((#1)^2)+746353 ((#1)^4)&,2], ]),(NumericalApproximation[Root, (RowDefault["-0.392", FEExpressionsNumericalApproximationElider]), Root[18769-236830 ((#1)^2)+746353 ((#1)^4)&,2], ]),(NumericalApproximation[Root, (RowDefault["0.464", FEExpressionsNumericalApproximationElider]), Root[73984-504544 ((#1)^2)+746353 ((#1)^4)&,3], ])}};

Manipulate[Graphics3D[{Sphere[reyes,.05],Tube[reyes[[#]],.02]&/@lines, 
Hyperplane[Most[planes[[pick]]], -Last[planes[[pick]]]] }],{pick,1,12,1}]

Integers

From Ed Pegg, Jr.
Dec 13, 2023

An integer solution cannot be made smaller. That becomes obvious with the barycentric coordinates of the points:

{{0,0,0,1},{0,0,1,0},{0,1,0,0},{1,0,0,0}, {0,0,1/2,1/2}, {0,1/2,0,1/2}, {1/2,0,0,1/2}, {0,1/3,1/3,1/3}, {1/3,0,1/3,1/3}, {1/3,1/3,0,1/3}, {1/5,1/5,1/5,2/5}, {1/4,1/4,1/4,1/4}}

3*4*5 =60

points={{0,0,0},{0,0,30},{0,30,0},{30,0,0},{0,0,60},{0,60,0},{60,0,0},{0,20,20},{20,0,20},{20,20,0},{15,15,15},{12,12,12}};

lines=ResourceFunction["FindExtraordinaryLines"][reyes2]

Length[lines]

LeviGraph[lines]

RecognizeGraph@%

configg=ConfigurationGraph[points,lines]

RecognizeGraph@configg

ToCommonEdges[configg,GraphData["ReyeConfigurationGraph"]]

GetGraphData["ReyeConfigurationGraph","File"]

planes={{-(2/3),-(2/3),-(1/3),20},{-(2/3),-(1/3),-(2/3),20},{-(1/3),-(2/3),-(2/3),20},{-(Sqrt[(2/3)]),-(1/(Sqrt[6])),-(1/(Sqrt[6])),10 (Sqrt[6])},{-(1/(Sqrt[6])),-(Sqrt[(2/3)]),-(1/(Sqrt[6])),10 (Sqrt[6])},{-(1/(Sqrt[6])),-(1/(Sqrt[6])),-(Sqrt[(2/3)]),10 (Sqrt[6])},{-1,0,0,0},{0,-1,0,0},{0,0,1,0},{0,-(1/(Sqrt[2])),(1/(Sqrt[2])),0},{-(1/(Sqrt[2])),0,(1/(Sqrt[2])),0},{-(1/(Sqrt[2])),(1/(Sqrt[2])),0,0}};

Manipulate[Graphics3D[{Sphere[points,1],Tube[points[[#]],.5]&/@lines, 
Hyperplane[Most[planes[[pick]]], -Last[planes[[pick]]]] }],{pick,1,12,1}]

Configuration

Length[pts={{460.156350453974`,86.54809969596795`},{648.0309050864188`,174.67494286437181`},{357.05868689675754`,215.83314737466458`},{543.9051527833656`,260.51457736226257`},{485.743053510471`,344.50596242943584`},{1072.2041494361094`,384.7862484601376`},{561.6021410824867`,415.9985607213812`},{436.6720311249185`,424.88170954776774`},{496.02394096883756`,446.4253669745699`},{376.1534138278588`,454.11870522993195`},{400.6542703438091`,873.8792540637843`},{7.924369434201765`,676.8443131903455`}}/1000]

Length[lines={{12,9,7},{12,10,8},{12,4,2},{12,3,1},{11,10,3},{10,9,6},{11,8,1},{1,2,6},{3,4,6},{3,5,7},{4,5,8},{1,5,9},{6,7,8},{11,7,2},{11,9,4},{2,5,10}}]

edges=Flatten[Partition[#,2,1]&/@lines,1];
g=Graph[Range[Length[pts]],UndirectedEdge@@@Sort[Sort/@edges],VertexCoordinates->pts,VertexLabels->Automatic]

RecognizeGraph@LeviGraph[lines]

GraphData["ReyeLineGraph","Graph","All"]

ConfigurationDiagram[pts,lines]

g=ConfigurationGraph[pts,lines]

RecognizeGraph@g

Embeddings

<<MathWorld`Graphs`

Names

GraphData["ReyeConfigurationGraph","StandardName"]

GraphData["ReyeConfigurationGraph","StandardNames"]

Primary

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

All

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

Inexact

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

Embedding types

GraphDataEmbeddings[GraphData["ReyeConfigurationGraph","EdgeList"]]

Default embedding

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

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

RecognizeGraph[g]

Degenerate

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

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

Configuration

GraphData["ReyeConfigurationGraph","Configuration"]

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

config=%[[1]]

(alledges=AddAllConfigurationEdges[config])//Timing

RecognizeGraph@alledges

ConfigurationDiagram[config,.1]

lines=ConfigurationLines[config]

ConfigurationNotation[lines]

GraphData["ReyeConfigurationGraph","IncidenceLines"]

levi=LeviGraph[lines]

RecognizeGraph[levi]

GraphData["ReyeConfigurationGraph","LeviGraph","Name"]

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

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

GraphData["ReyeConfigurationGraph","OrdinaryLineGraphName"]

(ordinarylinegraph=OrdinaryLineGraph[config])//Timing

RecognizeGraph@ordinarylinegraph

Configuration (3D)

GraphData["ReyeConfigurationGraph","Configuration"]

GraphData["ReyeConfigurationGraph","Graph",{"3D","Configuration"}]//StyleGraphs

config=%[[1]]

(alledges=AddAllConfigurationEdges[config])//Timing

RecognizeGraph@alledges

ConfigurationDiagram[config,10]

lines=ConfigurationLines[config]

ConfigurationNotation[lines]

GraphData["ReyeConfigurationGraph","IncidenceLines"]

levi=LeviGraph[lines]

RecognizeGraph[levi]

GraphData["ReyeConfigurationGraph","LeviGraph","Name"]

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

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

GraphData["ReyeConfigurationGraph","OrdinaryLineGraphName"]

(ordinarylinegraph=OrdinaryLineGraph[config])//Timing

RecognizeGraph@ordinarylinegraph

Projection

Manipulate[ProjectionGraph[GraphData["ReyeConfigurationGraph","Graph",{"3D","Configuration"}][[1]],{x,y,z}],{x,-1,1},{y,-1,1},{z,-1,1}]

g=ScaleGraph[ProjectionGraph[GraphData["ReyeConfigurationGraph","Graph",{"3D","Configuration"}][[1]],{2/10,-1/10,4/10}],(Sqrt[119])/500]

RecognizeGraph[g]

ConfigurationDiagram[g,.1]

lines=ConfigurationLines[g]

ConfigurationNotation[lines]

Bilateral

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

Circular

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

Circular construction

Length[hc=FindHamiltonianCycle[GraphData["ReyeConfigurationGraph"],All][[All,All,1]]]

Length[bilat=DeleteDuplicatesBy[DeleteMissing[BilaterallyRotatedGraph@CircularEmbeddingFromHamiltonianCycle[GraphData["ReyeConfigurationGraph"],#]&/@hc],CircularCanonicalGraphEmbedding]]//Timing

Planar

GraphData["ReyeConfigurationGraph","Planar"]

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

MinimalCrossing

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

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

MinimalCrossing construction

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

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

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

faces=ReverseSort@SymmetricallyDistinctFaces[g]

Tally[ReverseSort[Length/@faces]]

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

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

Table[MinimalCrossingGraph[GraphData["ReyeConfigurationGraph"],"CrossingNumber"->cn,RandomSeed->i],{i,500}]//Union

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

RecognizeGraph[g]

RectilinearCrossingCount[g]

MinimalLocalCrossing

GraphData["ReyeConfigurationGraph","LocalCrossingNumber"]

GraphData["ReyeConfigurationGraph","Graph","MinimalLocalCrossing"]//StyleGraphs

MinimalLocalCrossing construction

AdjacentCrossingsQ[g_Graph,cn_Integer]:=Module[{a=AdjacencyList[g],n=VertexCount[g]-cn},Max[Take[a,-cn]]>n]

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

Select[Table[MinimalCrossingGraph[GraphData["ReyeConfigurationGraph"],"CrossingNumber"->cn,RandomSeed->i],{i,5000}],!AdjacentCrossingsQ[#,cn]&]//Union//Timing

Circulant

GraphData["ReyeConfigurationGraph","Circulant"]

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

Halin

GraphData["ReyeConfigurationGraph","Halin"]

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

Rigid

GraphData["ReyeConfigurationGraph","Rigid"]

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

Flexible

GraphData["ReyeConfigurationGraph","Flexible"]

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

LCF

GraphData["ReyeConfigurationGraph","LCF"]

GraphData["ReyeConfigurationGraph","HamiltonianCycleCount"]

GraphData["ReyeConfigurationGraph","LCFSignature"]

GraphData["ReyeConfigurationGraph","LCFNotations"]

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

UnitDistance

GraphData["ReyeConfigurationGraph","UnitDistance"]

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

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

UnitDistance by refinement

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

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

UnitDistance by FindUnitDistanceEmbedding

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

Matchstick

GraphData["ReyeConfigurationGraph","Matchstick"]

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

3D default

Graph3D[GraphData["ReyeConfigurationGraph","Edges"]]

3D All

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

3D UnitDistance

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

3D Polyhedron

GraphData["ReyeConfigurationGraph","Polyhedral"]

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