Grünbaum-Rigby Configuration

Author

Eric W. Weisstein
May 22, 2026

This notebook downloaded from https://mathworld.wolfram.com/notebooks/Configurations/Gruenbaum-RigbyConfiguration.nb.

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

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

Source

https://en.wikipedia.org/wiki/Gr%C3%BCnbaum%E2%80%93Rigby_configuration

Configuration

Points and lines from Ed Pegg, Jr.
Dec 15, 2022

points=RootReduce[Flatten[Transpose[{CirclePoints[7],RotateRight[(NumericalApproximation[Root, (RowDefault["-2.80", FEExpressionsNumericalApproximationElider]), Root[-1+3 #1+4 ((#1)^2)+((#1)^3)&,1], ])CirclePoints[7],4],(NumericalApproximation[Root, (RowDefault["4.05", FEExpressionsNumericalApproximationElider]), Root[-1-4 #1-3 ((#1)^2)+((#1)^3)&,3], ])CirclePoints[7]}],1]]

Lines from
Marko Boben, Tomaz Pisanski, Arjana Zitnik, Branko Grunbaum
Small Triangle Free Configurations of Points and Lines
https://link.springer.com/content/pdf/10.1007/s00454-005-1224-9.pdf?pdf=button

lines={{1,2,7,11},{2,3,18,20},{3,4,7,12},{4,5,10,14},{2,5,6,21},
{6,7,10,15},{7,8,13,17},{3,5,8,9},{9,10,13,18},{10,11,16,20},
{6,8,11,12},{12,13,16,21},{2,13,14,19},{9,11,14,15},
{3,15,16,19},{1,5,16,17},{12,14,17,18},{1,6,18,19},{4,8,19,20},{15,17,20,21},{1,4,9,21}};

diagram=ConfigurationDiagram[points,lines,.4,VertexLabels->None]

cg=ConfigurationGraph[v,lines,VertexLabels->Automatic]

cgname=RecognizeGraph[cg]

GraphData[cgname,"Graph","Configuration"]

lines=ConfigurationLines[GraphData["GruenbaumRigbyConfigurationGraph"]]

alllines=ConfigurationLines[GraphData["GruenbaumRigbyConfigurationGraph"],"Restricted"->False]

additional=Complement[alllines,lines]

GraphicsRow[{diagram,Show[diagram,Graphics[{Red,LongestLine[v,#]&/@additional}]]}]

levi=LeviGraph[lines]

RecognizeGraph@levi

Orchard-Planting problem for 22 points with 4 points on each line

Ed Pegg, Jr.
Dec 11, 2023

points=Append[RootReduce[Flatten[#  CirclePoints[7]&/@{Root[1-4 #+3 #^2+#^3&,2,0],-1,Root[1+3 #-4 #^2+#^3&,2,0]},1]],{0,0}];
lines=ResourceFunction["FindExtraordinaryLines"][points];

Graphics[{LongestLine[points,#]&/@lines,Disk[#,.05]&/@points}]

cg=ConfigurationGraph[points,lines]

RecognizeGraph@cg

ConfigurationNotation[lines]

ConfigurationDiagram[cg]

Length[lines]

Length[points]

LeviGraph[lines]

RecognizeGraph@%

Embeddings

<<MathWorld`Graphs`

"GruenbaumRigbyConfigurationGraph"

Names

GraphData["GruenbaumRigbyConfigurationGraph","StandardName"]

GraphData["GruenbaumRigbyConfigurationGraph","StandardNames"]

Primary

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

All

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

Inexact

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

Embedding types

GraphDataEmbeddings[GraphData["GruenbaumRigbyConfigurationGraph"]]

Default embedding

g0=Graph[GraphData["GruenbaumRigbyConfigurationGraph","VertexList"],GraphData["GruenbaumRigbyConfigurationGraph","Edges"],VertexLabels->Automatic]

v=Join[CirclePoints[{1,-Pi/2},14],CirclePoints[{1/2,-Pi/2},7]][[{16,4,3,15,2,1,21,14,13,20,12,11,19,10,9,18,8,7,17,6,5}]];
g=Graph[Range@Length@v,EdgeList[g0],VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph@g

g0=LabelGraph@RotateGraph[,Pi]

v=Join[CirclePoints[7],CirclePoints[{3/4,-Pi/2},7],CirclePoints[{1/2,-Pi/2},7]][[{21,6,14,15,7,8,16,1,9,17,2,10,18,3,11,19,4,12,20,5,13}]];
g=Graph[Range@Length@v,EdgeList[g0],VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph@g

gs=UnlabelGraph/@{,}

Degenerate

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

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

Configuration

GetGraphData["GruenbaumRigbyConfigurationGraph","File"]

GraphData["GruenbaumRigbyConfigurationGraph","Configuration"]

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

config=%[[1]]

(alledges=AddAllConfigurationEdges[config])//Timing

RecognizeGraph@alledges

ConfigurationDiagram[config,.2]

ConfigurationLines[config]

lines=ConfigurationLines[config,"Restricted"->True]

GraphData["GruenbaumRigbyConfigurationGraph","IncidenceLines"]

levi=LeviGraph[lines]

RecognizeGraph[levi]

GraphData["GruenbaumRigbyConfigurationGraph","LeviGraph","Name"]

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

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

GraphData["GruenbaumRigbyConfigurationGraph","OrdinaryLineGraphName"]

(ordinarylinegraph=OrdinaryLineGraph[config])//Timing

RecognizeGraph@ordinarylinegraph

Incidence

GraphData["GruenbaumRigbyConfigurationGraph","Incidence"]

Stereographic projection construction

gs=PolyhedronProjectionGraph[GraphData["GruenbaumRigbyConfigurationGraph","Polyhedron"],#]&/@{3/2,4}//StyleGraphs

Perspective

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

HoneycombToroidal construction

GraphData["GruenbaumRigbyConfigurationGraph","NotationRules","HoneycombToroidal"]

GeneralizedPetersen

GraphData["GruenbaumRigbyConfigurationGraph","Graph","GeneralizedPetersen"]//StyleGraphs

IGraph

GraphData["GruenbaumRigbyConfigurationGraph","Graph","IGraph"]//StyleGraphs

Bilateral

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

Grid[DeleteCases[Monitor[{g=#,BilateralGraphEmbeddingTypes[#],GraphSymmetryGroup[#]}&/@GraphData["GruenbaumRigbyConfigurationGraph","Graph","All"],g],{_,_,TransformationGroup[{}]}],Dividers->All,Alignment->{{Center,{Left}}}]

Circular

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

Circular construction

GraphData["GruenbaumRigbyConfigurationGraph","Hamiltonian"]

GraphData["GruenbaumRigbyConfigurationGraph","HamiltonianCycleCount"]

Length[hc=FindHamiltonianCycle[GraphData["GruenbaumRigbyConfigurationGraph"],All][[All,All,1]]]//Timing

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

sym={#,GraphSymmetryGroup[#]}&/@circ;//Timing

Tally[sym[[All,-1]]]

Cases[sym,{gn_,TransformationGroup[{Rotation[{9.25185853854297`*^-18,-1.057355261547768`*^-17},((2 π)/7)]}]}:>gn]

gs=%[[{2,5,1,3,4,6}]]

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

gs=bilat

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

quad

Planar

GraphData["GruenbaumRigbyConfigurationGraph","Planar"]

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

MinimalCrossing

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

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

MinimalCrossing construction

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

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

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

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

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

(cn=CrossingNumber[GraphData["GruenbaumRigbyConfigurationGraph"],TimeConstraint->86400])//AbsoluteTiming

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

faces=ReverseSort@SymmetricallyDistinctFaces[g]

Tally[ReverseSort[Length/@faces]]

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

Select[gs,GraphSymmetryGroup[#,AdditionalData->Join[Table[True,GraphData["GruenbaumRigbyConfigurationGraph","V"]],Table[False,cn]],SameTest->Equal]=!=TransformationGroup[{}]&]

Select[gs,Max[OuterFace[#]]<=GraphData["GruenbaumRigbyConfigurationGraph","V"]&]

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

Select[gs,GraphSymmetryGroup[#,AdditionalData->Join[Table[True,GraphData["GruenbaumRigbyConfigurationGraph","V"]],Table[False,cn]],SameTest->Equal]=!=TransformationGroup[{}]&]

(gs=Table[MinimalCrossingGraph[GraphData["GruenbaumRigbyConfigurationGraph"],"CrossingNumber"->cn,RandomSeed->i],{i,50}]//Union)//Timing

Select[gs,GraphSymmetryGroup[#,AdditionalData->Join[Table[True,GraphData["GruenbaumRigbyConfigurationGraph","V"]],Table[False,cn]],SameTest->Equal]=!=TransformationGroup[{}]&]

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

RecognizeGraph[g]

RectilinearCrossingCount[g]

RectilinearLocalCrossingCount[g]

MinimalLocalCrossing

GraphData["GruenbaumRigbyConfigurationGraph",{"LocalCrossingNumber","RectilinearLocalCrossingNumber"}]

GraphData["GruenbaumRigbyConfigurationGraph","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["GruenbaumRigbyConfigurationGraph"],TimeConstraint->10])//AbsoluteTiming

(gs=Select[Table[MinimalCrossingGraph[GraphData["GruenbaumRigbyConfigurationGraph"],"CrossingNumber"->cn,RandomSeed->i],{i,20000}],!AdjacentCrossingsQ[#,cn]&]//Union)//Timing

Select[gs,GraphSymmetryGroup[#,AdditionalData->Join[Table[True,GraphData["GruenbaumRigbyConfigurationGraph","V"]],Table[False,cn]],SameTest->Equal]=!=TransformationGroup[{}]&]

(gs=Select[Table[MinimalCrossingGraph[GraphData["GruenbaumRigbyConfigurationGraph"],"CrossingNumber"->(cn=XXX),RandomSeed->i],{i,20000}],!AdjacentCrossingsQ[#,cn]&]//Union)//Timing

Select[gs,GraphSymmetryGroup[#,AdditionalData->Join[Table[True,GraphData["GruenbaumRigbyConfigurationGraph","V"]],Table[False,cn]],SameTest->Equal]=!=TransformationGroup[{}]&]

Circulant

GraphData["GruenbaumRigbyConfigurationGraph","Circulant"]

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

Circulant construction

GraphData["GruenbaumRigbyConfigurationGraph","NotationRules","Circulant"]

(ci=CirculantIndices[GraphData["GruenbaumRigbyConfigurationGraph"]])//Timing

CirculantGraph1@@@ci

Cases[GraphData["GruenbaumRigbyConfigurationGraph","StandardNames"],{"Circulant",i_}:>i]

CirculantGraph1@@@%

Complement graph

compl=GraphData["GruenbaumRigbyConfigurationGraph","ComplementGraph","Name"]

Line graph

GraphData["GruenbaumRigbyConfigurationGraph","Line"]

LineGraphQ[GraphData["GruenbaumRigbyConfigurationGraph"]]//Timing

RootGraph

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

RootGraph[GraphData["GruenbaumRigbyConfigurationGraph"]]

RecognizeGraph[%]

Halin

GraphData["GruenbaumRigbyConfigurationGraph","Halin"]

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

Rigid

GraphData["GruenbaumRigbyConfigurationGraph","Rigid"]

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

Flexible

GraphData["GruenbaumRigbyConfigurationGraph","Flexible"]

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

LCF

GraphData["GruenbaumRigbyConfigurationGraph","LCF"]

GraphData["GruenbaumRigbyConfigurationGraph","HamiltonianCycleCount"]

GraphData["GruenbaumRigbyConfigurationGraph","LCFSignature"]

GraphData["GruenbaumRigbyConfigurationGraph","LCFNotations"]

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

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

UnitDistance

GraphData["GruenbaumRigbyConfigurationGraph","UnitDistance"]

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

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

UnitDistance by refinement

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

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

UnitDistance by FindUnitDistanceEmbedding

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

Matchstick

GraphData["GruenbaumRigbyConfigurationGraph","Matchstick"]

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

3D default

Graph3D[GraphData["GruenbaumRigbyConfigurationGraph","Edges"]]

3D construction

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

RecognizeGraph[g]

3D All

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

3D UnitDistance

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

3D Polyhedron

GraphData["GruenbaumRigbyConfigurationGraph","Polyhedral"]

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