Fan Graph

Author

Eric W. Weisstein
November 30, 2022

This notebook downloaded from http://mathworld.wolfram.com/notebooks/GraphTheory/FanGraph.nb.

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

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

Graphics

GraphicsGrid[Table[Show[StyleGraphs@GraphData[{"Fan",{m,n}}],PlotLabel->Style[Subscript[F,m,n],Directive[Black,FontFamily->"Times"]]],{m,5},{n,2,5}],Dividers->All]

Special cases

TextGrid[Flatten[Table[{{m,n},RecognizeGraph[FanGraph[m,n]]},{m,8},{n,2,8}],1],Dividers->All]

Polyhedral

GraphData[{"Polyhedral","Fan"}]

Embeddings

<<MathWorld`Graphs`

GraphData["Fan"]

{"Fan", {1, 2}}

GraphData[{"Fan",{1,2}},"#"]

GraphData[{"Fan",{1,2}},"Graph","All"]

GraphData[{"Fan",{1,2}},"Graph","Fan"]

FanGraph[1,2]

{"Fan", {1, 3}}

GraphData[{"Fan",{1,3}},"Graph","All"]

GraphData[{"Fan",{1,3}},"Graph","Fan"]

FanGraph[1,3]

{"Fan", {1, 4}}

GraphData[{"Fan",{1,4}},"#"]

GraphData[{"Fan",{1,4}},"Graph","All"]

GraphData[{"Fan",{1,4}},"Graph","Fan"]

g=FanGraph[1,4]

{"Fan", {1, 5}}

GraphData[{"Fan",{1,5}},"#"]

GraphData[{"Fan",{1,5}},"Graph","All"]

GraphData[{"Fan",{1,5}},"Graph","Fan"]

g=FanGraph[1,5]

{"Fan", {1, 6}}

GraphData[{"Fan",{1,6}},"#"]

GraphData[{"Fan",{1,6}},"Graph","All"]

GraphData[{"Fan",{1,6}},"Graph","Fan"]

g=FanGraph[1,6]

{"Fan", {1, 7}}

GraphData[{"Fan",{1,7}},"#"]

GraphData[{"Fan",{1,7}},"Graph","All"]

GraphData[{"Fan",{1,7}},"Graph","Fan"]

g=FanGraph[1,7]

{"Fan", {1, 8}}

GraphData[{"Fan",{1,8}},"#"]

GraphData[{"Fan",{1,8}},"Graph","All"]

GraphData[{"Fan",{1,8}},"Graph","Fan"]

g=FanGraph[1,8]

{"Fan", {2, 2}}

GraphData[{"Fan",{2,2}},"#"]

GraphData[{"Fan",{2,2}},"Graph","All"]

GraphData[{"Fan",{2,2}},"Graph","Fan"]

g=FanGraph[2,2]

{"Fan", {2, 3)

GraphData[{"Fan",{2,3}},"#"]

GraphData[{"Fan",{2,3}},"Graph","All"]

GraphData[{"Fan",{2,3}},"Graph","Fan"]

g=Module[{n=3,k},
k=(n-1)/2;Graph[Range[n+2],UndirectedEdge@@@Join[Partition[Range[n],2,1],Flatten[Table[{i,j},{i,n},{j,n+1,n+2}],1]],VertexCoordinates->Join[Table[{i,0},{i,-k,k}],{{0,k},{0,-k}}]]]

GraphData[{"Fan",{2,3}},"Graph","Fan"]

<<MathWorld`Graphs`

g=FanGraph[2,3]

{"Fan", {2, 4}}

GraphData[{"Fan",{2,4}},"StandardName"]

Primary

GraphData[{"Fan",{2,4}}]//StyleGraphs[#,ImageSize->Small]&

All

GraphData[{"Fan",{2,4}},"Graph","All"]//StyleGraphs

Fan

g=FanGraph[2,4]

GraphData[{"Fan",{2,4}},"Graph","Fan"]//StyleGraphs

Planar

GraphData[{"Fan",{2,4}},"Planar"]

GraphData[{"Fan",{2,4}},"Graph","Planar"]//StyleGraphs

MinimalCrossing

GraphData[{"Fan",{2,4}},{"RCN","CN"}]

GraphData[{"Fan",{2,4}},"Graph","MinimalCrossing"]//StyleGraphs

Tutte embeddings

faces=ReverseSort@SymmetricallyDistinctFaces[GraphData[{"Fan",{2,4}}]]

Tally[ReverseSort[Length/@faces]]

IGLayoutTutte[GraphData[{"Fan",{2,4}}],"OuterFace"->#]&/@faces

gs=Annotate[#,{VertexLabels->None,ImageSize->Tiny}]&/@{,}

Tutte embedding construction 4

g=Module[{n=4,k},
k=(n-1)/2;Graph[Range[n+2],UndirectedEdge@@@Join[Partition[Range[n],2,1],Flatten[Table[{i,j},{i,n},{j,n+1,n+2}],1]],VertexCoordinates->Join[Table[{i,0},{i,-k,k}],{{0,k},{0,-k}}]]]

RecognizeGraph[g]

Tutte embedding construction 3 #1

GraphPlot[RotateGraph[,-2Pi/3]]

v={{-1,0},{1,0},{0,Sqrt[3]},{-1/4,1/2},{0,1/2},{1/4,1/2}};
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,1,5,2,6,3,4,1],e[4,5,6]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

Tutte embedding construction 3 #2

GraphPlot[RotateGraph[,2Pi/3]]

v={{-1,0},{1,0},{0,Sqrt[3]},{0,1/4},{-1/4,3/4},{1/4,3/4}};
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,1,4,2,6,4,5,3],e[1,5,6]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

LCF

GraphData[{"Fan",{2,4}},"LCFSignature"]

GraphData[{"Fan",{2,4}},"Graph","LCF"]//StyleGraphs

UnitDistance

GraphData[{"Fan",{2,4}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"Fan",{2,4}}],Debug->True]//Timing

Matchstick

GraphData[{"Fan",{2,4}},"Graph","Matchstick"]//StyleGraphs

3D

Graph3D[GraphData[{"Fan",{2,4}},"Edges"]]

Default embedding

GraphPlot@GraphData[{"Fan",{2,4}},"Edges"]

e[l__]:=Sequence@@Partition[{l},2,1]

v={{0,0},{1,0},{1,1},{1/2,1},{0,1},{1/2,1/2}};
g=RotateGraph[Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,4,5,1,6,2,4,1],e[5,6,3]},VertexCoordinates->v,VertexLabels->Automatic],π]

RecognizeGraph[g]

Equilateral outer face

e[l__]:=Sequence@@Partition[{l},2,1]
s=Sqrt[3]/2;
sc=3/4;
v={{-1/2,0},{0,0},{1/2,0},{0,s},sc{-1/4,s/2},sc{1/4,s/2}};
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,4,1,5,4,6,3],e[5,6,2,5]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

MinimalCrossing construction

GraphPlot@RotateGraph[MinimalCrossingGraph[GraphData[{"Fan",{2,4}}]]]

v={{0,-1},{1,0},{0,1},{-1,0},{-1/3,0},{1/3,0}};
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[3,4,1,2,3],e[1,5,3,6,1],e[4,5,6,2]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

RectilinearCrossingCount[g]

3D Polyhedron

GraphData[{"Fan",{2,4}},"Graph",{"3D","Polyhedron"}]

Graphics3D[{FaceForm[Green,Red],GraphData[{"Fan",{2,4}},"Polyhedron"]}]

3D Canonical Polyhedron construction

Graphics3D[{Opacity[.5],Red,GraphData[{"Fan",{2,4}},"Polyhedron"],Yellow,Sphere[]}]

3D Polyhedron construction

poly=GraphPolyhedron[GraphData[{"Fan",{2,4}}]]

Graphics3D[{FaceForm[Green,Red],poly}]

(can=FindCanonicalPolyhedron[Polyhedron[Normalize/@poly[[1]],poly[[2]]],WorkingPrecision->1000,MaxIterations->5000,PrecisionGoal->20])//Timing

Graphics3D[{Opacity[.5],Red,can,Yellow,Sphere[]}]

SimplePolyhedronQ[can]

(lens=Mean/@Split[Sort[PolyhedronEdgeLengths[can]],Abs[#1-#2]<1.*^-10&])//N

v=PolyhedronCoordinates[can];

colors={Red,Green,Black,Blue};

Graphics3D[{Thick,Sequence@@Nearest[Thread[lens->colors],EuclideanDistance@@v[[#]]],Line[v[[#]]]}&/@PolyhedronEdges[can],Boxed->False]

g=PolyhedronGraph[can]

{"Fan", {2, 5}}

GraphData[{"Fan",{2,5}},"StandardName"]

All

GraphData[{"Fan",{2,5}},"Graph","All"]//StyleGraphs

Fan

GraphData[{"Fan",{2,5}},"Graph","Fan"]//StyleGraphs

Halin

GraphData[{"Fan",{2,5}},"Graph","Halin"]//StyleGraphs

Planar

GraphData[{"Fan",{2,5}},"Planar"]

GraphData[{"Fan",{2,5}},"Graph","Planar"]//StyleGraphs

Tutte embeddings

faces=ReverseSort@SymmetricallyDistinctFaces[GraphData[{"Fan",{2,5}}]]

Tally[ReverseSort[Length/@faces]]

IGLayoutTutte[GraphData[{"Fan",{2,5}}],"OuterFace"->#]&/@faces

gs=Annotate[#,{VertexLabels->None,ImageSize->Tiny}]&/@{,}

Tutte embedding construction 4

GraphPlot[RotateGraph[]]

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

RecognizeGraph[g]

Tutte embedding construction 3 #1

GraphPlot[RotateGraph[]]

v={{-1,0},{1,0},{0,Sqrt[3]},{-1/4,1/4},{1/4,1/4},{-1/4,3/4},{1/4,3/4}};
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,1,5,2,7,4,1,6,7,3,6,4],{5,7}},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

Tutte embedding construction 3 #2

GraphPlot[RotateGraph[,2Pi/3]]

v={{-1,0},{1,0},{0,Sqrt[3]},{-1/4,1/4},{1/4,1/4},{-1/4,3/4},{1/4,3/4}};
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,1,6,7,2,5,4,6,5,7],e[2,4,1],{3,6}},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

LCF

GraphData[{"Fan",{2,5}},"LCFSignature"]

GraphData[{"Fan",{2,5}},"Graph","LCF"]//StyleGraphs

UnitDistance

GraphData[{"Fan",{2,5}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"Fan",{2,5}}],Debug->True]//Timing

GraphData[{"Fan",{2,5}},"Graph","UnitDistance"]//StyleGraphs

Matchstick

GraphData[{"Fan",{2,5}},"Graph","Matchstick"]//StyleGraphs

Default embedding

g=Module[{n=5,k},
k=(n-1)/2;Graph[Range[n+2],UndirectedEdge@@@Join[Partition[Range[n],2,1],Flatten[Table[{i,j},{i,n},{j,n+1,n+2}],1]],VertexCoordinates->Join[Table[{i,0},{i,-k,k}],{{0,k},{0,-k}}]]]

g=Graph@GraphData[{"Fan",{2,5}},"Edges"]

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

RecognizeGraph[g]

3D default

Graph3D[GraphData[{"Fan",{2,5}},"Edges"]]

3D All

GraphData[{"Fan",{2,5}},"Graph",{"3D","All"}]

3D Polyhedron

GraphData[{"Fan",{2,5}},"Graph",{"3D","Polyhedron"}]

Graphics3D[{FaceForm[Green,Red],GraphData[{"Fan",{2,5}},"Polyhedron"]}]

3D Polyhedron Canonical

Graphics3D[{Opacity[.5],Red,GraphData[{"Fan",{2,5}},"Polyhedron"],Yellow,Sphere[]}]

3D Polyhedron construction

Graphics3D[{FaceForm[Green,Red],poly=GraphPolyhedron[GraphData[{"Fan",{2,5}}],-1]}]

(can=FindCanonicalPolyhedron[poly,WorkingPrecision->1000,MaxIterations->5000,PrecisionGoal->20])//Timing

Graphics3D[{Opacity[.5],Red,can,Yellow,Sphere[]}]

SimplePolyhedronQ[can]

(lens=Mean/@Split[Sort[PolyhedronEdgeLengths[can]],Abs[#1-#2]<1.*^-10&])//N

v=PolyhedronCoordinates[can];

colors=With[{n=Length[lens]},Table[Hue[i/n],{i,0,n-1}]]

Graphics3D[{Thick,Sequence@@Nearest[Thread[lens->colors],EuclideanDistance@@v[[#]]],Line[v[[#]]]}&/@PolyhedronEdges[can],Boxed->False]

g=PolyhedronGraph[can]

{"Fan", {2, 6}}

GraphData[{"Fan",{2,6}},"StandardName"]

Primary

GraphData[{"Fan",{2,6}}]//StyleGraphs[#,ImageSize->Small]&

All

GraphData[{"Fan",{2,6}},"Graph","All"]//StyleGraphs

Fan

GraphData[{"Fan",{2,6}},"Graph","Fan"]//StyleGraphs

g=Module[{n=6,k},
k=(n-1)/2;Graph[Range[n+2],UndirectedEdge@@@Join[Partition[Range[n],2,1],Flatten[Table[{i,j},{i,n},{j,n+1,n+2}],1]],VertexCoordinates->Join[Table[{i,0},{i,-k,k}],{{0,k},{0,-k}}]]]

Planar

GraphData[{"Fan",{2,6}},"Planar"]

GraphData[{"Fan",{2,6}},"Graph","Planar"]//StyleGraphs

Tutte embeddings

faces=ReverseSort@SymmetricallyDistinctFaces[GraphData[{"Fan",{2,6}}]]

Tally[ReverseSort[Length/@faces]]

IGLayoutTutte[GraphData[{"Fan",{2,6}}],"OuterFace"->#]&/@faces

gs=Annotate[#,{VertexLabels->None,ImageSize->Tiny}]&/@{,,}

RecognizeGraph/@gs

Tutte embedding construction 4

GraphPlot[RotateGraph[]]

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

RecognizeGraph[g]

Tutte embedding construction 3 #1

GraphPlot[RotateGraph[]]

v=Join[{{-1,0},{1,0},{0,Sqrt[3]},{-1/2,1/4},{0,1/4},{1/2,1/4},{-1/4,1/2},{1/4,1/2}}];
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,1,5,2,6,5,4,1],e[4,3,6,8,5,7,4],e[7,3,8]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

Tutte embedding construction 3 #2

GraphPlot[RotateGraph[]]

v=Join[{{-1,0},{1,0},{0,Sqrt[3]},{-1/4,1/4},{1/4,1/4},{-1/4,1/2},{-1/4,3/4},{1/4,3/4}}];
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,1,5,2,8,7,6,4,1,7,3,8,5],e[4,8,6,1]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

Tutte embedding construction 3 #3

GraphPlot[RotateGraph[,2Pi/3]]

v=Join[UnitCirclePoints[3],CirclePoints[1/3,3]];
v=Join[v,Subdivide[v[[6]],v[[4]],3][[2;;-2]]];
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,1,4,8,7,6,3],e[6,5,4],e[2,5,3],e[6,1,7,5,8,1]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

Halin

GraphData[{"Fan",{2,6}},"Graph","Halin"]//StyleGraphs

LCF

GraphData[{"Fan",{2,6}},"LCFSignature"]

GraphData[{"Fan",{2,6}},"Graph","LCF"]//StyleGraphs

UnitDistance

GraphData[{"Fan",{2,6}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"Fan",{2,6}}],Debug->True]//Timing

GraphData[{"Fan",{2,6}},"Graph","UnitDistance"]//StyleGraphs

Matchstick

GraphData[{"Fan",{2,6}},"Graph","Matchstick"]//StyleGraphs

Default embedding

GraphPlot@GraphData[{"Fan",{2,6}},"Edges"]

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

RecognizeGraph[g]

3D default

Graph3D[GraphData[{"Fan",{2,6}},"Edges"]]

3D All

GraphData[{"Fan",{2,6}},"Graph",{"3D","All"}]

3D UnitDistance

GraphData[{"Fan",{2,6}},"Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData[{"Fan",{2,6}},"Graph",{"3D","Polyhedron"}]

Graphics3D[{FaceForm[Green,Red],GraphData[{"Fan",{2,6}},"Polyhedron"]}]

3D Canonical

GraphData[{"Fan",{2,6}},"Graph",{"3D","Canonical"}]

Graphics3D[{Opacity[.5],Red,GraphData[{"Fan",{2,6}},"Polyhedron"],Yellow,Sphere[]}]

3D Canonical construction

Graphics3D[{FaceForm[Green,Red],poly=GraphPolyhedron[GraphData[{"Fan",{2,6}}],-1]}]

(can=FindCanonicalPolyhedron[poly,WorkingPrecision->1000,MaxIterations->10000,PrecisionGoal->20])//Timing

SimplePolyhedronQ[can]

Graphics3D[{Opacity[.5],Red,can,Yellow,Sphere[]}]

(lens=Mean/@Split[Sort[PolyhedronEdgeLengths[can]],Abs[#1-#2]<1.*^-10&])//N

v=PolyhedronCoordinates[can];

colors=With[{n=Length[lens]},Table[Hue[i/n],{i,0,n-1}]]

Graphics3D[{Thick,Sequence@@Nearest[Thread[lens->colors],EuclideanDistance@@v[[#]]],Line[v[[#]]]}&/@PolyhedronEdges[can],Boxed->False]

g=PolyhedronGraph[can]

{"Fan", {2, 7}}

GraphData[{"Fan",{2,7}},"StandardName"]

Primary

GraphData[{"Fan",{2,7}}]//StyleGraphs[#,ImageSize->Small]&

All

GraphData[{"Fan",{2,7}},"Graph","All"]//StyleGraphs

Fan

GraphData[{"Fan",{2,7}},"Graph","Fan"]//StyleGraphs

FanGraph[2,7]

g=Module[{n=7,k},
k=(n-1)/2;Graph[Range[n+2],UndirectedEdge@@@Join[Partition[Range[n],2,1],Flatten[Table[{i,j},{i,n},{j,n+1,n+2}],1]],VertexCoordinates->Join[Table[{i,0},{i,-k,k}],{{0,k},{0,-k}}]]]

Planar

GraphData[{"Fan",{2,7}},"Planar"]

GraphData[{"Fan",{2,7}},"Graph","Planar"]//StyleGraphs

Tutte embeddings

faces=ReverseSort@SymmetricallyDistinctFaces[GraphData[{"Fan",{2,7}}]]

Tally[ReverseSort[Length/@faces]]

IGLayoutTutte[GraphData[{"Fan",{2,7}}],"OuterFace"->#]&/@faces

gs=Annotate[#,{VertexLabels->None,ImageSize->Tiny}]&/@{,,}

RecognizeGraph/@gs

Tutte embedding construction 4

GraphPlot[RotateGraph[]]

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

RecognizeGraph[g]

Tutte embedding construction 3 #1

GraphPlot[RotateGraph[]]

v=Join[{{-1,0},{1,0},{0,Sqrt[3]},{-1/2,1/4},{0,1/4},{1/2,1/4},{-1/4,1/2},{0,1/2},{1/4,1/2}}];
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,1,4,5,6,2,5,1],e[4,3,6,9,5],e[8,7,4],e[7,5,8,3,7],{3,9}},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

Tutte embedding construction 3 #2

GraphPlot[RotateGraph[,-2Pi/3]]

v=Join[{{-1,0},{1,0},{0,Sqrt[3]},{-1/2,1/4},{0,1/4},{1/2,1/4},{-1/4,1/2},{0,1/2},{1/4,1/2}}];
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,1,5,2,6,5,4,1],e[4,3,6,9,8,7,3,8,5,9,3],{5,7}},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

Tutte embedding construction 3 #3

GraphPlot[RotateGraph[,2Pi/3]]

v=Join[UnitCirclePoints[3],CirclePoints[1/4,3]];
v=Join[v,Take[Subdivide[v[[6]],v[[4]],4],{2,-2}]];
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,1,4,9,8,7,6,3,5,4],e[2,5,6,1,7,5],e[8,1,9,5,8]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

Halin

GraphData[{"Fan",{2,7}},"Graph","Halin"]//StyleGraphs

LCF

GraphData[{"Fan",{2,7}},"LCFSignature"]

GraphData[{"Fan",{2,7}},"Graph","LCF"]//StyleGraphs

UnitDistance

GraphData[{"Fan",{2,7}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"Fan",{2,7}}],Debug->True]//Timing

GraphData[{"Fan",{2,7}},"Graph","UnitDistance"]//StyleGraphs

Matchstick

GraphData[{"Fan",{2,7}},"Graph","Matchstick"]//StyleGraphs

Default embedding

GraphPlot@GraphData[{"Fan",{2,7}},"Edges"]

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

RecognizeGraph[g]

3D default

Graph3D[GraphData[{"Fan",{2,7}},"Edges"]]

3D All

GraphData[{"Fan",{2,7}},"Graph",{"3D","All"}]

3D UnitDistance

GraphData[{"Fan",{2,7}},"Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData[{"Fan",{2,7}},"Graph",{"3D","Polyhedron"}]

Graphics3D[{FaceForm[Green,Red],GraphData[{"Fan",{2,7}},"Polyhedron"]}]

3D Canonical

GraphData[{"Fan",{2,7}},"Graph",{"3D","Canonical"}]

Graphics3D[{Opacity[.5],Red,GraphData[{"Fan",{2,7}},"Polyhedron"],Yellow,Sphere[]}]

3D Canonical construction

Graphics3D[{FaceForm[Green,Red],poly=GraphPolyhedron[GraphData[{"Fan",{2,7}}],1]}]

(can=FindCanonicalPolyhedron[poly,WorkingPrecision->1000,MaxIterations->10000,PrecisionGoal->20])//Timing

SimplePolyhedronQ[can]

Graphics3D[{Opacity[.5],Red,can,Yellow,Sphere[]}]

(lens=Mean/@Split[Sort[PolyhedronEdgeLengths[can]],Abs[#1-#2]<1.*^-10&])//N

v=PolyhedronCoordinates[can];

colors=With[{n=Length[lens]},Table[Hue[i/n],{i,0,n-1}]]

Graphics3D[{Thick,Sequence@@Nearest[Thread[lens->colors],EuclideanDistance@@v[[#]]],Line[v[[#]]]}&/@PolyhedronEdges[can],Boxed->False]

g=PolyhedronGraph[can]

{"Fan", {2, 8}}

GraphData[{"Fan",{2,8}},"StandardName"]

Primary

GraphData[{"Fan",{2,8}}]//StyleGraphs[#,ImageSize->Small]&

All

GraphData[{"Fan",{2,8}},"Graph","All"]//StyleGraphs

Fan

GraphData[{"Fan",{2,8}},"Graph","Fan"]//StyleGraphs

g=FanGraph[2,8]

g=Module[{n=8,k},
k=(n-1)/2;Graph[Range[n+2],UndirectedEdge@@@Join[Partition[Range[n],2,1],Flatten[Table[{i,j},{i,n},{j,n+1,n+2}],1]],VertexCoordinates->Join[Table[{i,0},{i,-k,k}],{{0,k},{0,-k}}]]]

Planar

GraphData[{"Fan",{2,8}},"Planar"]

GraphData[{"Fan",{2,8}},"Graph","Planar"]//StyleGraphs

Tutte embeddings

faces=ReverseSort@SymmetricallyDistinctFaces[GraphData[{"Fan",{2,8}}]]

Tally[ReverseSort[Length/@faces]]

IGLayoutTutte[GraphData[{"Fan",{2,8}}],"OuterFace"->#]&/@faces

gs=Annotate[#,{VertexLabels->None,ImageSize->Tiny}]&/@{,,,}

RecognizeGraph/@gs

Tutte embedding construction 4

GraphPlot[RotateGraph[]]

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

RecognizeGraph[g]

Tutte embedding construction 3 #1

GraphPlot[RotateGraph[]]

v=Join[{{-1,0},{1,0},{0,Sqrt[3]},{-1/2,1/4},{0,1/4},{1/2,1/4}},Subdivide[{-1/4,1/2},{1/4,1/2},3]];
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,1,5,2,6,5,4,1],e[4,3,6,10,9],e[8,7,4],e[5,7,3,10,5,9,3,8,5]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

Tutte embedding construction 3 #2

GraphPlot[RotateGraph[]]

v=Join[{{-1,0},{1,0},{0,Sqrt[3]},{-1/2,1/4},{0,1/4},{1/2,1/4}},Subdivide[{-1/4,1/2},{1/4,1/2},3]];
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,1,5,2,6,5,4,1],e[4,3,6,10,3,7,4],e[5,7,8,5,9,3,8,9],{5,10}},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

Tutte embedding construction 3 #3

GraphPlot[RotateGraph[,-2Pi/3]]

v=Join[{{-1,0},{1,0},{0,Sqrt[3]},{-1/2,1/4},{0,1/4},{1/2,1/4}},Subdivide[{-1/4,1/2},{1/4,1/2},3]];
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,1,5,2,6,5,4,1],e[4,3,6,10,3,7,5,8,3,9,5,10,9,8,7]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

Tutte embedding construction 3 #4

GraphPlot[RotateGraph[,2Pi/3]]

v=Join[UnitCirclePoints[3],CirclePoints[1/3,3]];
v=Join[v,Subdivide[v[[6]],v[[4]],5][[2;;-2]]];
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,1,{4,10},4],e[6,3,5,2],e[6,1,7,5,8,1,9,5,10,1]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

Halin

GraphData[{"Fan",{2,8}},"Graph","Halin"]//StyleGraphs

LCF

GraphData[{"Fan",{2,8}},"LCFSignature"]

GraphData[{"Fan",{2,8}},"Graph","LCF"]//StyleGraphs

UnitDistance

GraphData[{"Fan",{2,8}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"Fan",{2,8}}],Debug->True]//Timing

GraphData[{"Fan",{2,8}},"Graph","UnitDistance"]//StyleGraphs

Matchstick

GraphData[{"Fan",{2,8}},"Graph","Matchstick"]//StyleGraphs

Default embedding

GraphPlot@GraphData[{"Fan",{2,8}},"Edges"]

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

RecognizeGraph[g]

3D default

Graph3D[GraphData[{"Fan",{2,8}},"Edges"]]

3D All

GraphData[{"Fan",{2,8}},"Graph",{"3D","All"}]

3D UnitDistance

GraphData[{"Fan",{2,8}},"Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData[{"Fan",{2,8}},"Graph",{"3D","Polyhedron"}]

Graphics3D[{FaceForm[Green,Red],GraphData[{"Fan",{2,8}},"Polyhedron"]}]

3D Canonical

GraphData[{"Fan",{2,8}},"Graph",{"3D","Canonical"}]

Graphics3D[{Opacity[.5],Red,GraphData[{"Fan",{2,8}},"Polyhedron"],Yellow,Sphere[]}]

3D Canonical construction

Graphics3D[{FaceForm[Green,Red],poly=GraphPolyhedron[GraphData[{"Fan",{2,8}}],1]}]

(can=FindCanonicalPolyhedron[poly,WorkingPrecision->1000,MaxIterations->10000,PrecisionGoal->20])//Timing

SimplePolyhedronQ[can]

Graphics3D[{Opacity[.5],Red,can,Yellow,Sphere[]}]

(lens=Mean/@Split[Sort[PolyhedronEdgeLengths[can]],Abs[#1-#2]<1.*^-10&])//N

v=PolyhedronCoordinates[can];

colors=With[{n=Length[lens]},Table[Hue[i/n],{i,0,n-1}]]

Graphics3D[{Thick,Sequence@@Nearest[Thread[lens->colors],EuclideanDistance@@v[[#]]],Line[v[[#]]]}&/@PolyhedronEdges[can],Boxed->False]

g=PolyhedronGraph[can]

{"Fan", {3, 2}}

GraphData[{"Fan",{3,2}},"#"]

GraphData[{"Fan",{3,2}},"Graph","All"]

GraphData[{"Fan",{3,2}},"Graph","Fan"]

g=FanGraph[3,2]

{"Fan", {3, 3}}

GraphData[{"Fan",{3,3}},"#"]

GraphData[{"Fan",{3,3}},"Graph","All"]

GraphData[{"Fan",{3,3}},"Graph","Fan"]

g=FanGraph[3,3]

{"Fan", {3, 4}}

GraphData[{"Fan",{3,4}},"#"]

GraphData[{"Fan",{3,4}},"Graph","All"]

GraphData[{"Fan",{3,4}},"Graph","Fan"]

g=FanGraph[3,4]

{"Fan", {3, 5}}

GraphData[{"Fan",{3,5}},"#"]

GraphData[{"Fan",{3,5}},"Graph","All"]

GraphData[{"Fan",{3,5}},"Graph","Fan"]

g=FanGraph[3,5]

{"Fan", {3, 6}}

GraphData[{"Fan",{3,6}},"#"]

GraphData[{"Fan",{3,6}},"Graph","All"]

GraphData[{"Fan",{3,6}},"Graph","Fan"]

g=FanGraph[3,6]

{"Fan", {3, 7}}

GraphData[{"Fan",{3,7}},"#"]

GraphData[{"Fan",{3,7}},"Graph","All"]

GraphData[{"Fan",{3,7}},"Graph","Fan"]

g=FanGraph[3,7]

{"Fan", {3, 8}}

GraphData[{"Fan",{3,8}},"#"]

GraphData[{"Fan",{3,8}},"Graph","All"]

GraphData[{"Fan",{3,8}},"Graph","Fan"]

g=FanGraph[3,8]

{"Fan", {4, 2}}

GraphData[{"Fan",{4,2}},"#"]

GraphData[{"Fan",{4,2}},"Graph","All"]

GraphData[{"Fan",{4,2}},"Graph","Fan"]

g=FanGraph[4,2]

{"Fan", {4, 3}}

GraphData[{"Fan",{4,3}},"#"]

GraphData[{"Fan",{4,3}},"Graph","All"]

GraphData[{"Fan",{4,3}},"Graph","Fan"]

g=FanGraph[4,3]

{"Fan", {4, 4}}

GraphData[{"Fan",{4,4}},"#"]

GraphData[{"Fan",{4,4}},"Graph","All"]

GraphData[{"Fan",{4,4}},"Graph","Fan"]

g=FanGraph[4,4]

{"Fan", {4, 5}}

GraphData[{"Fan",{4,5}},"StandardName"]

Primary

GraphData[{"Fan",{4,5}}]//StyleGraphs[#,ImageSize->Small]&

All

GraphData[{"Fan",{4,5}},"Graph","All"]//StyleGraphs

Inexact

Select[GraphData[{"Fan",{4,5}},"Graph","All"],(!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&)]//StyleGraphs

Embedding types

GraphDataEmbeddings[GraphData[{"Fan",{4,5}},"EdgeList"]]

Default embedding

GraphPlot@GraphData[{"Fan",{4,5}},"Edges"]

GraphPlot[GraphData[{"Fan",{4,5}},"Edges"],GraphLayout->"HighDimensionalEmbedding"]

RotateGraph[GraphicsToGraph@,Pi]

v={{-1,0},{1,0},{-1/2,1/2},{1/2,1/2},{-1,1},{1,1},{-1/2,3/2},{1/2,3/2},{0,5/2}};
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[2,6,9,5,1,3,6,8,1,7,9,8,2,4,5,3,2,7,6,4,1],e[8,5,7],e[3,9,4]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

Degenerate

GraphData[{"Fan",{4,5}},"Graph","Degenerate"]//StyleGraphs

Bilateral

GraphData[{"Fan",{4,5}},"Graph","Bilateral"]//StyleGraphs

Circular

GraphData[{"Fan",{4,5}},"Graph","Circular"]//StyleGraphs

Planar

GraphData[{"Fan",{4,5}},"Planar"]

GraphData[{"Fan",{4,5}},"Graph","Planar"]//StyleGraphs

MinimalCrossing

GraphData[{"Fan",{4,5}},{"RCN","CN"}]

GraphData[{"Fan",{4,5}},"Graph","MinimalCrossing"]//StyleGraphs

MinimalCrossing construction

(cn=CrossingNumber[GraphData[{"Fan",{4,5}}],TimeConstraint->10])//AbsoluteTiming

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

Table[MinimalCrossingGraph[GraphData[{"Fan",{4,5}}],"CrossingNumber"->cn,RandomSeed->i],{i,50}]//Union

GraphPlot@

v={{-1,0},{0,-1},{1,0},{0,1},{0,0},{0,1/2},{0,-3/4},{-1/2,-1/4},{1/2,-1/4}};
g=Graph[Range[Length[v]],UndirectedEdge@@@{e[1,2,3,4,1,5,3,7,1,6,3],e[2,7,5,6,4,9,2,8,4],e[8,5,9,7,8,6,9]},VertexCoordinates->v,VertexLabels->Automatic]

RecognizeGraph[g]

RectilinearCrossingCount[g]

Circulant

GraphData[{"Fan",{4,5}},"Circulant"]

GraphData[{"Fan",{4,5}},"Graph","Circulant"]//StyleGraphs

Halin

GraphData[{"Fan",{4,5}},"Halin"]

GraphData[{"Fan",{4,5}},"Graph","Halin"]//StyleGraphs

LCF

GraphData[{"Fan",{4,5}},"LCF"]

GraphData[{"Fan",{4,5}},"HamiltonianCycleCount"]

GraphData[{"Fan",{4,5}},"LCFSignature"]

GraphData[{"Fan",{4,5}},"Graph","LCF"]//StyleGraphs

UnitDistance

GraphData[{"Fan",{4,5}},"UnitDistance"]

UnitDistanceGraphQ[GraphData[{"Fan",{4,5}}],Debug->True]//Timing

GraphData[{"Fan",{4,5}},"Graph","UnitDistance"]//StyleGraphs

Select[%,!FreeQ[GraphEmbedding[#],_?InexactNumberQ]&]

UnitDistance by refinement

UnitDistanceEmbeddingRefine[Graph[GraphData[{"Fan",{4,5}},"VertexList"],GraphData[{"Fan",{4,5}},"EdgeList"]]]

UnitDistanceGraphEmbeddingQ[%]

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

Select[%,UnitDistanceGraphEmbeddingQ]

UnitDistance by FindUnitDistanceEmbedding

FindUnitDistanceEmbedding[GraphData[{"Fan",{4,5}}],MaxIterations->5000,"ReturnWithMessage"->True]//Timing

Matchstick

GraphData[{"Fan",{4,5}},"Matchstick"]

GraphData[{"Fan",{4,5}},"Graph","Matchstick"]//StyleGraphs

3D default

Graph3D[GraphData[{"Fan",{4,5}},"Edges"]]

3D All

GraphData[{"Fan",{4,5}},"Graph",{"3D","All"}]

3D UnitDistance

GraphData[{"Fan",{4,5}},"Graph",{"3D","UnitDistance"}]

3D Polyhedron

GraphData[{"Fan",{4,5}},"Polyhedral"]

GraphData[{"Fan",{4,5}},"Graph",{"3D","Polyhedron"}]

{"Fan", {4, 6}}

GraphData[{"Fan",{4,6}},"#"]

GraphData[{"Fan",{4,6}},"Graph","All"]

GraphData[{"Fan",{4,6}},"Graph","Fan"]

g=FanGraph[4,6]

{"Fan", {4, 7)

GraphData[{"Fan",{4,7}},"#"]

GraphData[{"Fan",{4,7}},"Graph","All"]

GraphData[{"Fan",{4,7}},"Graph","Fan"]

g=FanGraph[4,7]

{"Fan", {4, 8}}

GraphData[{"Fan",{4,8}},"#"]

GraphData[{"Fan",{4,8}},"Graph","All"]

GraphData[{"Fan",{4,8}},"Graph","Fan"]

g=FanGraph[4,8]

{"Fan", {5, 2}}

GraphData[{"Fan",{5, 2}},"#"]

GraphData[{"Fan",{5,2}},"Graph","All"]

GraphData[{"Fan",{5,2}},"Graph","Fan"]

g=FanGraph[5,2]

{"Fan", {5, 3}}

GraphData[{"Fan",{5, 3}},"#"]

GraphData[{"Fan",{5,3}},"Graph","All"]

GraphData[{"Fan",{5,3}},"Graph","Fan"]

g=FanGraph[5,3]

{"Fan", {5, 4}}

GraphData[{"Fan",{5, 4}},"#"]

GraphData[{"Fan",{5,4}},"Graph","All"]

GraphData[{"Fan",{5,4}},"Graph","Fan"]

GraphData[{"Fan",{5,4}},"Graph","MinimalCrossing"]

g=FanGraph[5,4]

v=Join[CirclePoints[{1,π/2},4],CirclePoints[{1/3,π/2},4],{{0,-2/3}}];

g=Graph[Range[Length[v]],UndirectedEdge@@@Join[Partition[Range[4],2,1,1],Partition[Range[5,8],2,1,1],Partition[{2,6,8,4,5},2,1,1],Partition[{2,7,4,9},2,1,1],Partition[{3,6,1,8},2,1,1],{{6,9},{8,9}}],VertexCoordinates->v,VertexLabels->"Name"]

RecognizeGraph[g]

{"Fan", {5, 5}}

GraphData[{"Fan",{5,5}},"#"]

GraphData[{"Fan",{5,5}},"Graph","All"]

GraphData[{"Fan",{5,5}},"Graph","Fan"]

g=FanGraph[5,5]

{"Fan", {5, 6}}

GraphData[{"Fan",{5,6}},"#"]

GraphData[{"Fan",{5,6}},"Graph","All"]

GraphData[{"Fan",{5,6}},"Graph","Fan"]

g=FanGraph[5,6]

{"Fan", {5, 7}}

GraphData[{"Fan",{5,7}},"#"]

GraphData[{"Fan",{5,7}},"Graph","All"]

GraphData[{"Fan",{5,7}},"Graph","Fan"]

g=FanGraph[5,7]

{"Fan", {5, 8}}

GraphData[{"Fan",{5,8}},"#"]

GraphData[{"Fan",{5,8}},"Graph","All"]

GraphData[{"Fan",{5,8}},"Graph","Fan"]

g=FanGraph[5,8]

GraphData

GraphClassString

GraphClassString[GraphData["Fan"]]

GraphDataString

Do[Print[GraphDataString[FanGraph[m,n],
"Name"->"("<>ToString[m]<>","<>ToString[n]<>")-fan graph",
"StandardName"->{"Fan",{m,n}},
"Classes"->{"Fan"},
"NotationRules"->{"Fan"->{m,n}},
"Skip"->{"Perfect"},
"Information"->"FanGraph",
"Vertices"->None,
TimeConstraint->120
]],{m,5},{n,2,8}]