Regular Icosahedron

Author

Eric W. Weisstein
January 4, 2024

This notebook downloaded from http://mathworld.wolfram.com/notebooks/Polyhedra/RegularIcosahedron.nb.

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

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

Figure

GraphicsRow[{
Graphics3D[{Opacity[.5],PolyhedronData["Icosahedron","Polyhedron"]},Boxed->False],
Graphics3D[{PolyhedronData["Icosahedron","Lines"]},Boxed->False],
PolyhedronData["Icosahedron","Net"]
},ImageSize->700]

Solid

PolyhedronData["Icosahedron","Orientations"]

Show[PolyhedronData[{"Icosahedron",#}],Boxed->False]&/@PolyhedronData["Icosahedron","Orientations"]

Solid and Dual

GraphicsRow[PolyhedronData["Icosahedron",#]&/@{"Graphics3D","Dual","DualCompound"}]

Orientations

axes=Line[{-#,#}]&/@Permutations[{1.1,0,0}];

Show[GraphicsArray[Graphics3D[{Polyhedron[Icosahedron,#],{Red,Thickness[.02],axes}},PlotLabel->#,Boxed->False,ViewPoint->{5,1,0}]&/@{"C2","C3","C5"}]]

Show[GraphicsArray[Graphics3D[{Polyhedron[Icosahedron,#],{Red,Thickness[.02],axes}},Boxed->False,PlotLabel->#,ViewPoint->{0,0,5}]&/@{"C2","C3","C5"}]]

UniformPolyhedron

uniform=UniformPolyhedron[stdname="Icosahedron"]

PolyhedronFaceTally[uniform]

indices=UniformPolyhedronIndex[stdname]

UniformPolyhedron/@{
stdname,
Lookup[indices,"Wenninger"],
Sequence@@(List@@@Normal[indices]/."Maeder"->"Uniform")
}

SameQ@@%

Graphics3D/@(polys=Polygon[uniform[[1]],#]&/@uniform[[2]])

Graphics3D[#,Boxed->False]&/@{uniform,polys}

Bulatov

BulatovUniformName[UniformPolyhedronIndex[stdname,"Kaleido"]]

BulatovUniformGraphics3D[UniformPolyhedronIndex[stdname,"Kaleido"],Boxed->False]

bulatov=BulatovUniformPolyhedron[UniformPolyhedronIndex[stdname,"Kaleido"]]

Graphics3D/@(polys=Polygon[bulatov[[1]],#]&/@bulatov[[2]])

PolyhedronFaceTally[bulatov]

Graphics3D[#,Boxed->False]&/@{bulatov,polys}

Maeder

MaederUniformName[UniformPolyhedronIndex[stdname,"Maeder"]]

wythoff=MaederWythoffSymbol[UniformPolyhedronIndex[stdname,"Maeder"]]

With[{n=UniformPolyhedronIndex[stdname,"Maeder"]},Import["https://www.mathconsult.ch/static/unipoly/"<>If[n<10,"0",""]<>ToString[n]<>".html","Images"]][[1]]

maeder=MaederUniformPolyhedron[UniformPolyhedronIndex[stdname,"Maeder"]]

Graphics3D/@(polys=Polygon[maeder[[1]],#]&/@maeder[[2]])

PolyhedronFaceTally[maeder]

Graphics3D[#,Boxed->False]&/@{maeder,polys}

Net

PolyhedronData["Icosahedron","Net"]

PolyhedronData["Icosahedron","Net","Colored"]

NetPrintout[Icosahedron,"Icosahedron.pdf"]

Faces

Graphics3D/@PolyhedronData["Icosahedron","Polygons"]

Projections

PolyhedronProjectionGraph[PolyhedronData["Icosahedron","Polyhedron"],#]&/@{{0,0,1},{0,1,0,π/4+π/20+π/40},{1,-.001,0},{1,0,-1},{3-(Sqrt[5]),0,-1},{(1/3) (-1-(Sqrt[5])),0,-1},{1,0,1},{1.5,-1.5,.3,-.15}}

GraphData["IcosahedralGraph","Graph","Perspective"]

Properties

Initialization

<<MathWorld`Polyhedra`

p=PolyhedronData[pname="Icosahedron","Polyhedron"]

vol=PolyhedronData[pname,"Volume"]

Centroid

PolyhedronData["Icosahedron","Centroid"]

RegionCentroid[PolyhedronData["Icosahedron","Polyhedron"]]//FullSimplify

Circumradius

PolyhedronData["Icosahedron","Circumradius"]

RootReduce[%]

Circumsphere[PolyhedronData["Icosahedron","Polyhedron"]]//RootReduce//Timing

MyCircumsphere[PolyhedronData["Icosahedron","Polyhedron"]]//RootReduce//Timing

ConvexHullOf

hullof=DeleteCases[Select[PolyhedronData[All],PolyhedronData[#,"ConvexHullName"]===pname&],pname]

GraphicsGrid[Partition[Graphics3D[{
{Green,Opacity[.7],PolyhedronData[#,"Polyhedron"]},
{Blue,Opacity[.4],PolyhedronData[#,"ConvexHull","Polyhedron"]}},Boxed->False,PlotLabel->Style[PolyhedronData[#,"Name"],Directive[14,Black,Italic,FontFamily->"Times"]]]&/@hullof,UpTo[3]],Dividers->All,ImageSize->800]

Insphere

PolyhedronData["Icosahedron","Insphere"]

Insphere[p]//RootReduce//FullSimplify//Timing

FullSimplify[(Sqrt[(7/24)+((Sqrt[5])/8)])-(1/12) (3 (Sqrt[3])+(Sqrt[15]))]

(sphere=MyInsphere[p,Debug->True,"Simplification"->RootReduce])//Timing

Graphics3D[{{Opacity[.5],p},{Red,sphere}},Boxed->False]

InertiaTensor

PolyhedronData["Icosahedron","InertiaTensor"]

((MomentOfInertia[PolyhedronData["Icosahedron","Polyhedron"]])/(Volume[PolyhedronData["Icosahedron","Polyhedron"]]))//FullSimplify

MeanCylindricalRadius

PolyhedronData[pname,"MeanCylindricalRadius"]

N[%]

((NIntegrate[(Sqrt[(x^2)+(y^2)]),{x,y,z}∈p])/vol)

Integrate over polyhedron [unevaluated]

(i=((Integrate[(Sqrt[(x^2)+(y^2)]),{x,y,z}∈p])/vol))//Timing

CAD

(cad=CylindricalDecomposition[PolyhedronData[pname,"RegionFunction"][x,y,z],{x,y,z},"Function"])//Timing

((NIntegrate[(Sqrt[(x^2)+(y^2)])Boole[cad],{x,y,z}∈FullRegion[3]])/vol)

(rxy=((Integrate[(Sqrt[(x^2)+(y^2)])Boole[cad],{x,y,z}∈FullRegion[3]])/vol))//Timing

CAD over  1/4

reg=FullSimplify[PolyhedronData[pname,"RegionFunction"][x,y,z]&&y>0&&z>0]

(cad=CylindricalDecomposition[reg,{x,y,z},"Function"])//Timing

4((NIntegrate[(Sqrt[(x^2)+(y^2)])Boole[cad],{x,y,z}∈FullRegion[3]])/vol)

(rxy=4((Integrate[(Sqrt[(x^2)+(y^2)])Boole[cad],{x,y,z}∈FullRegion[3]])/vol))//Timing

N[rxy]

ResourceFunction["LogSimplify"][rxy]//FullSimplify

Divergence theorem

(rxy=MeanCylindricalRadius[p,"Simplification"->FullSimplify,Debug->True])//Timing

N[rxy]

ResourceFunction["LogSimplify"][rxy]//FullSimplify

MeanInteriorLineSegmentLength

lbar=PolyhedronData[pname,"MeanInteriorLineSegmentLength"]

N[%]

ByteCount[lbar]

(lbarsimp=FullSimplify[lbar])//Timing

ByteCount[lbarsimp]

Dominik Beck.  "Mean distance in polyhedra."  https://arxiv.org/abs/2309.13177

N[((197/525)+(239/(525(Sqrt[5])))-(44/525)(Sqrt[2+(2/(Sqrt[5]))])-(((17226+6269(Sqrt[5]))π)/157500)-(((2186+1413(Sqrt[5]))ArcCot[GoldenRatio])/15750)+(((82-75(Sqrt[5]))ArcCot[(GoldenRatio^2)])/5250)+(((15969+7151(Sqrt[5]))ArcCoth[GoldenRatio])/12600)+((4(2139+881(Sqrt[5]))ArcCsch[GoldenRatio])/7875)+(((4449-1685(Sqrt[5]))Log[3])/42000)-(((75783+37789(Sqrt[5]))Log[5])/252000)),20]

N[(1/2)((((9/5)-(3/(Sqrt[5]))))^(1/3))((197/525)+(239/(525(Sqrt[5])))-(44/525)(Sqrt[2+(2/(Sqrt[5]))])-(((17226+6269(Sqrt[5]))π)/157500)-(((2186+1413(Sqrt[5]))ArcCot[GoldenRatio])/15750)+(((82-75(Sqrt[5]))ArcCot[(GoldenRatio^2)])/5250)+(((15969+7151(Sqrt[5]))ArcCoth[GoldenRatio])/12600)+((4(2139+881(Sqrt[5]))ArcCsch[GoldenRatio])/7875)+(((4449-1685(Sqrt[5]))Log[3])/42000)-(((75783+37789(Sqrt[5]))Log[5])/252000)),20]

Solve[vol (a^3)==1,a,PositiveReals]//FullSimplify

N[(1/((((9/5)-(3/(Sqrt[5]))))^(1/3)))(1/2)((((9/5)-(3/(Sqrt[5]))))^(1/3))((197/525)+(239/(525(Sqrt[5])))-(44/525)(Sqrt[2+(2/(Sqrt[5]))])-(((17226+6269(Sqrt[5]))π)/157500)-(((2186+1413(Sqrt[5]))ArcCot[GoldenRatio])/15750)+(((82-75(Sqrt[5]))ArcCot[(GoldenRatio^2)])/5250)+(((15969+7151(Sqrt[5]))ArcCoth[GoldenRatio])/12600)+((4(2139+881(Sqrt[5]))ArcCsch[GoldenRatio])/7875)+(((4449-1685(Sqrt[5]))Log[3])/42000)-(((75783+37789(Sqrt[5]))Log[5])/252000)),20]

(1/((((9/5)-(3/(Sqrt[5]))))^(1/3)))(1/2)((((9/5)-(3/(Sqrt[5]))))^(1/3))((197/525)+(239/(525(Sqrt[5])))-(44/525)(Sqrt[2+(2/(Sqrt[5]))])-(((17226+6269(Sqrt[5]))π)/157500)-(((2186+1413(Sqrt[5]))ArcCot[GoldenRatio])/15750)+(((82-75(Sqrt[5]))ArcCot[(GoldenRatio^2)])/5250)+(((15969+7151(Sqrt[5]))ArcCoth[GoldenRatio])/12600)+((4(2139+881(Sqrt[5]))ArcCsch[GoldenRatio])/7875)+(((4449-1685(Sqrt[5]))Log[3])/42000)-(((75783+37789(Sqrt[5]))Log[5])/252000))

N[%]

ineq=PolyhedronData[pname,"RegionFunction"]

{{xmin,xmax},{ymin,ymax},{zmin,zmax}}=RegionBounds[ImplicitRegion[ineq[x,y,z],{x,y,z}]]//FullSimplify

(1/(vol^2)) NIntegrate[Sqrt[(x1-x2)^2+(y1-y2)^2+(z1-z2)^2]Boole[ineq[x1,y1,z1]&&ineq[x2,y2,z2]],
{x1,xmin,xmax},{y1,ymin,ymax},{z1,zmin,zmax},
{x2,xmin,xmax},{y2,ymin,ymax},{z2,zmin,zmax}]//Timing

(1/(vol^2)) NIntegrate[Sqrt[(x1-x2)^2+(y1-y2)^2+(z1-z2)^2]Boole[ineq[x1,y1,z1]&&ineq[x2,y2,z2]],
{x1,xmin,xmax},{y1,ymin,ymax},{z1,zmin,zmax},
{x2,xmin,xmax},{y2,ymin,ymax},{z2,zmin,zmax},
Method->{"GlobalAdaptive","MaxErrorIncreases"->1*^4}]//Timing

Monte Carlo

reg=PolyhedronData[pname,"Region"]

Length[lines=Partition[RandomPoint[N@reg,10^7],2]]//Timing

Graphics3D[{{Opacity[.03],EdgeForm[],DiscretizeRegion[reg]},Red,Line/@Take[lines,UpTo@1000]},AspectRatio->Automatic]

lengths=Norm/@Subtract@@@lines;//Timing

Histogram[lengths,{.01}]

Mean[lengths]

MeanSphericalRadius

PolyhedronData[pname,"MeanSphericalRadius"]

((NIntegrate[(Sqrt[(x^2)+(y^2)+(z^2)]),{x,y,z}∈PolyhedronData["Icosahedron","Polyhedron"]])/(PolyhedronData["Icosahedron","Volume"]))

((Integrate[(Sqrt[(x^2)+(y^2)+(z^2)]),{x,y,z}∈PolyhedronData["Icosahedron","Polyhedron"]])/(PolyhedronData["Icosahedron","Volume"]))//Timing

Integrate[(Sqrt[(x^2)+(y^2)+(z^2)]),{x,y,z}∈ConvexHullRegion[Append[PolyhedronData["Icosahedron","Polygons"][[1,1]],{0,0,0}]]]//Timing

cad=CylindricalDecomposition[PolyhedronData["Icosahedron","RegionFunction"][x,y,z],{x,y,z},"Function"]

MeanSquareCylindricalRadius

PolyhedronData[pname,"MeanSquareCylindricalRadius"]

((Integrate[(x^2)+(y^2),{x,y,z}∈PolyhedronData[{"Icosahedron",#},"Polyhedron"]])/(PolyhedronData["Icosahedron","Volume"]))&/@PolyhedronData["Icosahedron","Orientations"]//FullSimplify

MeanSquareSphericalRadius

PolyhedronData[pname,"MeanSquareSphericalRadius"]

((Integrate[(x^2)+(y^2)+(z^2),{x,y,z}∈PolyhedronData[{"Icosahedron",#},"Polyhedron"]])/(PolyhedronData["Icosahedron","Volume"]))&/@PolyhedronData["Icosahedron","Orientations"]//FullSimplify

Midsphere

sphere=PolyhedronData[pname,"Midsphere"]

(sphere=Midsphere[p])//Timing

FullSimplify[(1/2) (Sqrt[((5+(Sqrt[5]))/(5-(Sqrt[5])))])-(GoldenRatio/2)]

(sphere=Midsphere[p,Method->"PointLineDistance"])//Timing

Graphics3D[{{Opacity[.5],Yellow,p},{Red,sphere}},Boxed->False]

SurfaceArea

PolyhedronData["Icosahedron","SurfaceArea"]

SurfaceArea[PolyhedronData["Icosahedron","Polyhedron"]]//FullSimplify

Total[Area/@PolyhedronData["Icosahedron","Polygons"]]//RootReduce

Volume

PolyhedronData["Icosahedron","Volume"]

FunctionExpand[%]//FullSimplify

Volume[PolyhedronData["Icosahedron","Polyhedron"]]//FullSimplify

PolyhedronVolume[PolyhedronData["Icosahedron","Polyhedron"],Method->"GaussLaw"]//FullSimplify

Inequalities

i=FullSimplify[PolyhedronInequalities[Polyhedron[Icosahedron],{x,y,z}]][[1]]

v5.0

<<Calculus`Integration`
<<Graphics`InequalityGraphics`

InequalityPlot3D[N[i],{x},{y},{z}]//Timing

NIntegrate[Boole[And@@i],{x},{y},{z}]//Timing

NIntegrate[Boole[And@@i],{x},{y},{z},Method->QuasiMonteCarlo,MaxPoints->10^6]//Timing

Integrate[Boole[And@@i],{x},{y},{z}]//Timing

v5.1

<<Graphics`InequalityGraphics`

InequalityPlot3D[N[i],{x,-3,3},{y,-3,3},{z,-3,3}]//Timing

NIntegrate[Boole[And@@i],{x,-∞,∞},{y,-∞,∞},{z,-∞,∞}]//Timing

Integrate[Boole[And@@i],{x,-∞,∞},{y,-∞,∞},{z,-∞,∞}]//Timing

v5.2

<<Graphics`InequalityGraphics`

NIntegrate[Boole[And@@i],{x,-∞,∞},{y,-∞,∞},{z,-∞,∞}]//Timing

Integrate[Boole[And@@i],{x,-∞,∞},{y,-∞,∞},{z,-∞,∞}]//Timing

Vertex subset hulls

p="Icosahedron";
Graphics3D[{MapIndexed[Text[#2[[1]],#1,Background->White]&,v=PolyhedronData[p,"VertexCoordinates"]],PolyhedronData[p,"Faces"]},Boxed->False]

s=Union[FullSimplify[Union[Simplify[Union[Norm/@Subtract@@@Subsets[v,{2}]]]]]]

Tetrahedron ϕ

lengths=s[[2]] Sort[Norm/@Subtract@@@Subsets[PolyhedronData[p2="Tetrahedron","VertexCoordinates"],{2}]]//N

(hull=Monitor[Select[Subsets[Range[PolyhedronData[p,"V"]],{PolyhedronData[p2,"V"]}],Sort[Norm/@Subtract@@@Subsets[N[v[[i=#]]],{2}]]== lengths&],i])//Timing

Tetrahedron (Sqrt[(1/2) (5+(Sqrt[5]))])

lengths=s[[3]] Sort[Norm/@Subtract@@@Subsets[PolyhedronData[p2="Tetrahedron","VertexCoordinates"],{2}]]//N

(hull=Monitor[Select[Subsets[Range[PolyhedronData[p,"V"]],{PolyhedronData[p2,"V"]}],Sort[Norm/@Subtract@@@Subsets[N[v[[i=#]]],{2}]]== lengths&],i])//Timing

Octahedron ϕ

lengths=s[[2]] Sort[Norm/@Subtract@@@Subsets[PolyhedronData[p2="Octahedron","VertexCoordinates"],{2}]]//N

(hull=Monitor[Select[Subsets[Range[PolyhedronData[p,"V"]],{PolyhedronData[p2,"V"]}],Sort[Norm/@Subtract@@@Subsets[N[v[[i=#]]],{2}]]== lengths&],i])//Timing

Octahedron (Sqrt[(1/2) (5+(Sqrt[5]))])

lengths=s[[3]] Sort[Norm/@Subtract@@@Subsets[PolyhedronData[p2="Octahedron","VertexCoordinates"],{2}]]//N

(hull=Monitor[Select[Subsets[Range[PolyhedronData[p,"V"]],{PolyhedronData[p2,"V"]}],Sort[Norm/@Subtract@@@Subsets[N[v[[i=#]]],{2}]]== lengths&],i])//Timing

Cube ϕ

lengths=s[[2]] Sort[Norm/@Subtract@@@Subsets[PolyhedronData[p2="Cube","VertexCoordinates"],{2}]]//N

(hull=Monitor[Select[Subsets[Range[PolyhedronData[p,"V"]],{PolyhedronData[p2,"V"]}],Sort[Norm/@Subtract@@@Subsets[N[v[[i=#]]],{2}]]== lengths&],i])//Timing

Cube (Sqrt[(1/2) (5+(Sqrt[5]))])

lengths=s[[3]] Sort[Norm/@Subtract@@@Subsets[PolyhedronData[p2="Cube","VertexCoordinates"],{2}]]//N

(hull=Monitor[Select[Subsets[Range[PolyhedronData[p,"V"]],{PolyhedronData[p2,"V"]}],Sort[Norm/@Subtract@@@Subsets[N[v[[i=#]]],{2}]]== lengths&],i])//Timing

Icosahedron decagon

dodecagonIcos:=Module[
	{i,r=.81},
	Table[r{Cos[Pi i/5+Pi/10],Sin[Pi i/5+Pi/10],0},{i,10}]
]

WriteLiveForm["icosdod1.m",
Show[Graphics3D[SplitLines[{frame[icosahedron[]],dodecagonIcos},1]],
		Boxed->False,ViewPoint->{.2,-3,2.2}]]

WriteLiveForm["icosdo2.m",
Show[PolyhedronPolygon[icosahedron[1]//N,dodecagonIcos//N],
		opts,ViewPoint->{.2,-3,2.2}]]

Show[GraphicsArray[{
Show[Graphics3D[{frame[icosahedron],dodecagonIcos}],
		Boxed->False,DisplayFunction->Identity,ViewPoint->{.2,-3,2.2}],
			Show[Graphics3D[{icosahedron[[1]],line[dodecagonIcos[[1]]]}],
					Boxed->False,DisplayFunction->Identity,ViewPoint->{.2,-3,2.2}]
			}],DisplayFunction->$DisplayFunction]

Icosahedron dodecahedron

WriteLiveForm["icoindod.m",
	Show[Graphics3D[{
			SplitLines[frame[dodecahedron[.85]],1],
		 {PointSize[.03],Point/@Union[Flatten[Flatten[icosahedron[1,Pi/5]] /. Polygon->Identity,1]]},
			icosahedron[1,Pi/5]}],
	opts]]

WriteLiveForm["dodinico.m",
	Show[Graphics3D[{
			SplitLines[frame[icosahedron[1.9,Pi/5]],2],
		 {PointSize[.03],Point/@Union[Flatten[Flatten[dodecahedron[1]] /. Polygon->Identity,1]]},
			dodecahedron[1]}],
	opts]]

Icosahedron octahedron

Show[GraphicsArray[{Table[
	Show[Graphics3D[{
			frame[octahedron],
			{PointSize[.02],Point/@OctahedronIcosahedronPoints[i]},
			OctahedronIcosahedron[i]
		}],
		Boxed->False,PlotRange->All,ViewPoint->{2.348, -1.728, 1.718},
				DisplayFunction->Identity],
{i,2}]
		}]]

Do[
	WriteLiveForm["octicos"<>ToString[i]<>".m",
Show[Graphics3D[SplitLines[{frame[octahedron[]],
			{PointSize[.02],Point/@OctahedronIcosahedronPoints[i]},
			OctahedronIcosahedron[i]
		},2]],
		Boxed->False,DisplayFunction->Identity,PlotRange->All,ViewPoint->{2.348, -1.728, 1.718},
			opts]],
{i,2}]

Construction

(Subscript[C, 5])

IcosahedronExact:=IcosahedronExact=icosahedron[1,0]

icosahedron[a_:1,ang_:0]:=Module[{topV,botV,top,bot,midtop,midbot,i,r=a/(Sqrt[50-10Sqrt[5]]/5)},topV=Table[r{2/5 Sqrt[5]Cos[2/5 Pi i+ang],2/5 Sqrt[5]Sin[2/5 Pi i+ang],Sqrt[5]/5},{i,5}];
botV=-topV;
top=Table[{{0,0,r},topV[[i]],topV[[p5[i+1]]]},{i,5}];
bot=-top;
midtop=Table[{topV[[i]],botV[[p5[i+3]]],topV[[p5[i+1]]]},{i,5}];
midbot=-midtop;
OrientCentered[Flatten[{Polygon/@top,Polygon/@bot,Polygon/@midtop,Polygon/@midbot}]]]

Show[Graphics3D[Polyhedron[Icosahedron]]]

(Subscript[C, 2])

θ=ArcCos[FullSimplify[Divide@@Through[{Midradius,Circumradius}[Icosahedron]]]]

Show[Graphics3D[poly=FullSimplify[Polyhedron[Icosahedron]/.Polygon[x_]:>Polygon[RotationMatrixY[θ].#&/@x]]],ViewPoint->2{0,0,1}]

With[{p=Icosahedron},FullSimplify[RootReduce[poly[[1,#[[1]],1,#[[2]]]]&/@(First[Position[PolyhedronFaces[p],#]]&/@Range[Length[PolyhedronVertices[p]]])]]]//InputForm

(Subscript[C, 3])

θ=ArcCos[FullSimplify[Divide@@Through[{Inradius,Circumradius}[Icosahedron]]]]

Show[Graphics3D[poly=FullSimplify[Polyhedron[Icosahedron]/.Polygon[x_]:>Polygon[RotationMatrixY[-θ].#&/@x]]],ViewPoint->2{0,0,1}]

With[{p=Icosahedron},FullSimplify[RootReduce[poly[[1,#[[1]],1,#[[2]]]]&/@(First[Position[PolyhedronFaces[p],#]]&/@Range[Length[PolyhedronVertices[p]]])]]]//InputForm

Stellation

FaceIntersections[poly_]:=Module[{pairs=KSubsets[Take[#,3]&/@First/@poly,2]},
DeleteCases[Intersection3D@@@Map[Plane,pairs,{2}],{}]
]

poly=Icosahedron;
Timing[lines=FaceIntersections[Polyhedron[poly]];]

Timing[newlines=Map[ToExact,lines,{4}];]

Length/@{lines,newlines}

Timing[Length[points=Intersection3D@@@KSubsets[newlines,2]]]

Length[points2=Union[DeleteCases[points,{}],SameTest->(Abs[N[#1[[1]]-#2[[1]],200]]=={0,0,0}&)]]//Timing

Timing[points3=Map[ToExact,points2,{4}];]

Show[Graphics3D[{Polyhedron[poly],{Red,newlines},{PointSize[.02],points3}}]]

Convex Hull

Show[Graphics3D[ConvexHull3D[First/@points3]]]