Jabulani Polyhedron

Author

Eric W. Weisstein
April 7, 2022

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

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

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

Sources

https://en.wikipedia.org/wiki/Adidas_Jabulani

Kuchel, P.W.  Note 96.45 in "Can You 'Bend' a Truncated Truncated Tetrahedron?"  Math. Gaz. 96, 317–323, 2012.

Graphic

PolyhedronData["JabulaniPolyhedron","Orientations"]

Graphics3D[{Opacity[.8],PolyhedronData["JabulaniPolyhedron","GraphicsComplex"]},Method->{"ShrinkWrap"->True},Boxed->False,ImageSize->200]

PolyhedronData["JabulaniPolyhedron","Region"]

Net

PolyhedronData["JabulaniPolyhedron","Net"]

{PolyhedronData["JabulaniPolyhedron","Net"],PolyhedronData["JabulaniPolyhedron","Net","Colored"]}

Classes

PolyhedronData["JabulaniPolyhedron","Classes"]

Trapezoids

Ratio of long to short:

N[t=(((1-((2 Sin[(π/9)])/(Sqrt[3]))))^(-1))]

PolyhedronData["JabulaniPolyhedron","Edges","Length"]

Tally[RootReduce[EuclideanDistance@@@PolyhedronData["JabulaniPolyhedron","Lines"][[All,1]]]]

lines={RootReduce[EuclideanDistance@@#[[1]]],#}&/@PolyhedronData["JabulaniPolyhedron","Lines"];

Take[lines,2]

split=SplitBy[Sort[lines],First];

h=Sqrt[(t^2)-(((((t-1)/2)))^2)]//FullSimplify

edgegraphic=Graphics3D[{Thick,Transpose[{{Red,Blue},#[[All,2]]&/@split}]},Boxed->False]

trapezoidgraphic=Graphics[{
Text["t",{0,0},{0,2}],
Text["t",Mean[{{1/2,h},{t/2,0}}],{-4,0}],
Text[Style[1,Plain],{0,h},{0,-2}],
FaceForm[LightYellow],EdgeForm[Black],trap=Polygon[{{-t/2,0},{t/2,0},{1/2,h},{-1/2,h}}],
Text[Style["θ",Plain],{-t/2,0},{-4,-2}]
},
AspectRatio->Automatic,BaseStyle->Directive[Italic,18,FontFamily->"Times"]]

GraphicsRow[{edgegraphic,trapezoidgraphic}]

PolygonAngle[trap]//RootReduce

N[%,20]/Degree

From Kuchel:

ArcCos[(1/2)-(2/(Sqrt[3]))Sin[20Degree]Sin[50Degree]]//FunctionExpand//RootReduce

Pick[facei,Length/@facei,4]

Graphics3D[{PolyhedronData["JabulaniPolyhedron","Polygons"][[2]],MapIndexed[Text[#2[[1]],#,Background->White]&,v=PolyhedronData["JabulaniPolyhedron","Vertices"]]}]

EuclideanDistance@@v[[{19,18}]]//RootReduce

EuclideanDistance@@v[[{18,25}]]//RootReduce

RegionDistance[Line[v[[{26,25}]]],Mean[v[[{18,19}]]]]//RootReduce

EuclideanDistance@@v[[{19,18}]]//RootReduce

EuclideanDistance@@v[[{18,25}]]//RootReduce

RegionDistance[Line[v[[{26,25}]]],Mean[v[[{18,19}]]]]//RootReduce

Properties

Ratio of long to short:

N[t=(((1-((2 Sin[(π/9)])/(Sqrt[3]))))^(-1))]

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

reg=PolyhedronData[pname,"Region"]

Centroid

?Centroid

(xbar=Centroid[PolyhedronData["JabulaniPolyhedron","GraphicsComplex"],vol])//Timing

Circumsphere

PolyhedronCircumsphere[PolyhedronData["JabulaniPolyhedron","Vertices"]]//RootReduce

RootReduce[Norm/@PolyhedronData["JabulaniPolyhedron","Vertices"]]//Union

Graphics3D[{PolyhedronData["JabulaniPolyhedron","GraphicsComplex"],Opacity[.3],Sphere[{0,0,0},Root[-24291+99288 ((#1)^2)-14400 ((#1)^4)+512 ((#1)^6)&,5]]}]

EdgeLengths

PolyhedronData["JabulaniPolyhedron","Edges","Length"]

N[%]

N[Root[-3+9 #1-6 ((#1)^2)+((#1)^3)&,2],20]

FullSimplify[Root[-3+9 #1-6 ((#1)^2)+((#1)^3)&,2]-t]

Tally[RootReduce[EuclideanDistance@@@PolyhedronData["JabulaniPolyhedron","Lines"][[All,1]]]]

Edges

PolyhedronData["JabulaniPolyhedron","EdgeCount"]

PolyhedronData["JabulaniPolyhedron","Edges","Count"]

PolyhedronData["JabulaniPolyhedron","Edges"]

Length[%]

Faces

PolyhedronData["JabulaniPolyhedron","Faces","Count"]

PolyhedronData["JabulaniPolyhedron","FaceCount"]

facei=PolyhedronData["JabulaniPolyhedron","FaceIndices"]

Length[%]

Sort@Tally[Length/@PolyhedronData["JabulaniPolyhedron","FaceIndices"]]

Insphere

faces=PolyhedronData["JabulaniPolyhedron","Faces","Polygon"][[1]];

r6=RootReduce[Norm[SelectFirst[faces,Length[#[[1]]]==6&]/.Polygon[x_]:>Total[x]/6]]

r9=RootReduce[Norm[SelectFirst[faces,Length[#[[1]]]==9&]/.Polygon[x_]:>Total[x]/9]]

Different radii, so no insphere

Graphics3D[{Opacity[.2],PolyhedronData["JabulaniPolyhedron","GraphicsComplex"],{Blue,Sphere[{0,0,0},r6]},{Green,Sphere[{0,0,0},r9]}},Boxed->False]

Mesh

PolyhedronData["JabulaniPolyhedron","MeshRegion"]

MeanCylindricalRadius

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

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

N[i]

MeanCylindricalSquareRadius

((NIntegrate[(x^2)+(y^2),{x,y,z}∈p])/(PolyhedronData[pname,"Volume"]))

(i=((Integrate[(x^2)+(y^2),{x,y,z}∈p])/(PolyhedronData[pname,"Volume"])))//Timing

N[i]

r=RootApproximant[N[i,1000],64]

N[i-r,5000]

MeanSphericalRadius

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

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

N[i]

MeanSphericalSquareRadius

((NIntegrate[(x^2)+(y^2)+(z^2),{x,y,z}∈p])/(PolyhedronData[pname,"Volume"]))

(i=((Integrate[(x^2)+(y^2)+(z^2),{x,y,z}∈p])/(PolyhedronData[pname,"Volume"])))//Timing

N[i]

r=RootApproximant[N[i,1000],64]

N[i-r,5000]

Midsphere

Not applicable

Region

PolyhedronData["JabulaniPolyhedron","Region"]

RegionFunction

ByteCount[ineq=PolyhedronInequalities[PolyhedronData["JabulaniPolyhedron","Faces","Polygon"][[1]],{x,y,z}]]

ineq//N

And@@FullSimplify[RootReduce[ineq]]

RegionPlot3D[And@@ineq,{x,-3.2,3.2},{y,-3.2,3.2},{z,-3.2,3.2},PlotPoints->50,Boxed->False,Axes->False,Method->{"ShrinkWrap"->True}]

RegionPlot3D[Evaluate[PolyhedronData["JabulaniPolyhedron","RegionFunction"][x,y,z]],{x,-3.2,3.2},{y,-3.2,3.2},{z,-3.2,3.2},PlotPoints->50,Boxed->False,Axes->False,Method->{"ShrinkWrap"->True}]

InertiaTensor

?InertiaTensor

InertiaTensor[PolyhedronData["JabulaniPolyhedron","GraphicsComplex"]]//RootReduce//Timing

Skeleton

PolyhedronData["JabulaniPolyhedron","Skeleton"]

PolyhedronData["JabulaniPolyhedron","Skeleton","Name"]

GraphData["JabulaniSkeleton",{"Cubic","Hamiltonian"}]

GraphicsGrid[Partition[Delete[Drop[GraphData["JabulaniSkeleton","Graph","All"],-4],List/@{4,6}]//StyleGraphs,5],ImageSize->700]

SurfaceArea

PolyhedronData["JabulaniPolyhedron","SurfaceArea"]

(area1=PolyhedronSurfaceArea[p])//Timing

ToAlgebraicRoot[area1]//Timing

(area=SurfaceArea[reg])//Timing

ToAlgebraicRoot[area]//Timing

Vertices

PolyhedronData["JabulaniPolyhedron","VertexCount"]

PolyhedronData["JabulaniPolyhedron","Vertices","Count"]

PolyhedronData["JabulaniPolyhedron","Vertices"]//Length

Volume

PolyhedronData["JabulaniPolyhedron","Volume"]

ToRadicals[%]

?PolyhedronVolume

(vol1=PolyhedronVolume[PolyhedronData["JabulaniPolyhedron","Polyhedron"]])//Timing

ToAlgebraicRoot[vol1]//Quiet//Timing

RootReduce[vol1]//Timing//Quiet

(vol2=PolyhedronVolume[PolyhedronData["JabulaniPolyhedron","Polyhedron"],Method->"Pyramids"])//Timing

ToAlgebraicRoot[vol2]//Quiet//Timing

RootReduce[vol2]//Timing//Quiet

N[%]

N[Root[-20492208801+644020841880 ((#1)^2)-62002368 ((#1)^4)+512 ((#1)^6)&,5],20]

(vol=Volume[reg])//Timing

ToAlgebraicRoot[vol]//Quiet//Timing

Perspective projections

Manipulate[PolyhedronProjectionGraph[PolyhedronData["JabulaniPolyhedron","Polyhedron"],{a,b,c}],{a,-1,1},{b,-1,1},{c,-1,1}]

{0,(Sqrt[2]),1}

g=PolyhedronProjectionGraph[PolyhedronData["JabulaniPolyhedron","Polyhedron"],{0,(Sqrt[2]),1},VertexLabels->"Name"]

{0,.675,.5}/.675

g=PolyhedronProjectionGraph[PolyhedronData["JabulaniPolyhedron","Polyhedron"],{0,1,.74},VertexLabels->"Name"]

g=PolyhedronProjectionGraph[PolyhedronData["JabulaniPolyhedron","Polyhedron"],{0,1,z},VertexLabels->"Name"]

v=GraphEmbedding[g];

FullSimplify[#.#&/@v[[{19,18,20}]],z>0]

Solve[Equal@@%,z]

FullSimplify[%]

{(Sqrt[6]),(Sqrt[2]),1,Pi/2}

g=PolyhedronProjectionGraph[PolyhedronData["JabulaniPolyhedron","Polyhedron"],{(Sqrt[6]),(Sqrt[2]),1,Pi/2},VertexLabels->"Name"]

g=PolyhedronProjectionGraph[PolyhedronData["JabulaniPolyhedron","Polyhedron"],{1,.6,.4},VertexLabels->"Name"]

{.495,.29,.195}/.495

g=PolyhedronProjectionGraph[PolyhedronData["JabulaniPolyhedron","Polyhedron"],{1,.6,.4},VertexLabels->"Name"]

v=GraphEmbedding[g];

eqn=FullSimplify[(#.#&/@v[[{2,12,5}]]),x>0&&y>0]

NSolve[Equal@@Numerator[eqn],{x,y}]

diff=FullSimplify[Subtract@@@Partition[Numerator[eqn],2,1]]

gbx=GroebnerBasis[diff,x,y]//RootReduce

Roots[gbx[[1]]==0,x]//RootReduce

gby=GroebnerBasis[diff,y,x]//RootReduce

Roots[gby[[1]]==0,y]//RootReduce

{(Sqrt[3]),-1,(Sqrt[2])}

g=PolyhedronProjectionGraph[PolyhedronData["JabulaniPolyhedron","Polyhedron"],{(Sqrt[3]),-1,(Sqrt[2])},VertexLabels->"Name"]

{1,-.585,.815}

g=PolyhedronProjectionGraph[PolyhedronData["JabulaniPolyhedron","Polyhedron"],{1,-.585,.815},VertexLabels->"Name"]

g=PolyhedronProjectionGraph[PolyhedronData["JabulaniPolyhedron","Polyhedron"],{1,-x,y},VertexLabels->"Name"]

v=GraphEmbedding[g];

eqns=FullSimplify[{v[[3,1]]==v[[7,1]],v[[17,1]]==-v[[20,1]]},x>0&&y>0]

Solve[eqns,{x,y}]//FullSimplify

N[%]

{1, (Sqrt[3]), 0,-ArcTan[(Sqrt[2])]}

g=PolyhedronProjectionGraph[PolyhedronData["JabulaniPolyhedron","Polyhedron"],{1,(Sqrt[3]),0,-ArcTan[(Sqrt[2])]},VertexLabels->"Name"]

v=GraphEmbedding[g];

ArcTan@@(v[[4]]-v[[8]])//FullSimplify

{.115,.2,0}/.2

PolyhedronProjectionGraph[PolyhedronData["JabulaniPolyhedron","Polyhedron"],{.5,1,0},VertexLabels->"Name"]

PolyhedronProjectionGraph[PolyhedronData["JabulaniPolyhedron","Polyhedron"],{.575,1,0}]

g=PolyhedronProjectionGraph[PolyhedronData["JabulaniPolyhedron","Polyhedron"],{x,1,0}]

v=GraphEmbedding[g];

FullSimplify[v[[2]]-v[[10]],x>0]

Solve[(NumericalApproximation[Root, (RowDefault["-1.55", FEExpressionsNumericalApproximationElider]), Root[3-36 #1-12 ((#1)^2)+8 ((#1)^3)&,1], ])+x (NumericalApproximation[Root, (RowDefault["2.69", FEExpressionsNumericalApproximationElider]), Root[-243+12312 ((#1)^2)-2160 ((#1)^4)+64 ((#1)^6)&,5], ])==0,x]//FullSimplify

(0, 1, 0)

PolyhedronProjectionGraph[PolyhedronData["JabulaniPolyhedron","Polyhedron"],{0,1,0,π}]

Construction

Kuchel

Kuchel, P.~W.  Note 96.45.  ``Can You `Bend' a Truncated Truncated Tetrahedron?''  {\it Math.\ Gaz.} {\bf 96}, 317--323, 2012.

From scratch

Inradius[n_]:=Cot[Pi/n]/2

Circumradius[n_]:=Csc[Pi/n]/2

p=Append[-#,0]&/@CirclePoints[Circumradius[9],9];

Show[Graphics3D[{FaceForm[None],EdgeForm[Black],Polygon[p],MapIndexed[Text[#2[[1]],#,Background->White]&,p]}]]

t=(4/(Sqrt[3]))Sin[20Degree]Sin[50Degree]//FunctionExpand//FullSimplify

P0=p[[5]];
P1={0,y1,z1};
P2={x2,y2,z2};
P3=p[[6]];

(eqns={
t^2==SquaredEuclideanDistance[P0,P1],
1==SquaredEuclideanDistance[P1,P2],
1==SquaredEuclideanDistance[P2,P3],
((v1=P1-P2).(v2=P3-P2))^2==((1/2-2/(Sqrt[3])Sin[20Degree]Sin[50Degree])Norm[v1]Norm[v2])^2,
Dot[P3-P1,Cross[P2-P1,P0-P3]]==0 (* coplanar *)
}/.Abs[x_]:>Identity[x])//Column

(soln=NSolve[And@@eqns&&y1<0&&y2<0&&z1>0&&z2>0,{y1,z1,x2,y2,z2},Reals,WorkingPrecision->200][[1]])//N//Column

exactsoln=soln/.x_?NumericQ:>RootApproximant[x]

p2={P0,P1,P2,P3}/.exactsoln;

EuclideanDistance@@@Partition[p2,2,1,1]//RootReduce//FullSimplify

FullSimplify[%[[1]]-t]

p3={-#1,#2,#3}&@@@p2;

Show[Graphics3D[solid=Flatten[{
Polygon[p],
Polygon/@Table[RotationMatrix[2π/3 k,{0,0,1}].#&/@p2,{k,0,2}],
Polygon/@Table[RotationMatrix[2π/3 k,{0,0,1}].#&/@p3,{k,0,2}]
}]]]

solid/.Polygon[x_]:>Norm/@N[Subtract@@@Partition[x,2,1,1]]

v=Union[Flatten[solid/.Polygon[x_]:>x,1]];

Show[Graphics3D[{solid,MapIndexed[Text[#2[[1]],#]&,v]}]]

{Q1,Q2,Q3,Q4}=v[[{10,18,22,14}]];

eqns={
SquaredEuclideanDistance[{x,y,z},Q1]==1,
({x,y,z}-Q1).(Q2-Q1)==Cos[2π/3],
Dot[Q3-Q1,Cross[Q2-Q1,{x,y,z}-Q3]]==0
};

solns=NSolve[And@@eqns&&z>0&&y<0,{x,y,z},Reals,WorkingPrecision->200];

exactsoln=(solns[[2]]/.x_?NumericQ:>RootApproximant[x])[[All,2]]

Graphics3D[Polygon[{Q3,Q2,Q1,Q0=exactsoln}]]

Norm/@Subtract@@@Partition[{Q3,Q2,Q1,Q0},2,1]//N

eqns=With[{z=2 (Sqrt[(2/3)])},{
SquaredEuclideanDistance[{x,y,z},Q4]==1,
({x,y,z}-Q4).(Q3-Q4)==Cos[2π/3]
}]/.Abs[x_]:>Identity[x]

solns=NSolve[And@@eqns,{x,y},Reals,WorkingPrecision->200]

exactsoln=Append[(solns[[2]]/.x_?NumericQ:>RootApproximant[x])[[All,2]],2 (Sqrt[(2/3)])]

Graphics3D[Polygon[hex={Q0,Q1,Q2,Q3,Q4,QQ=exactsoln}]]

Show[Graphics3D[{FaceForm[Blue,Red],solid=Flatten[{
Polygon[Reverse@p],
Polygon/@Table[RotationMatrix[2π/3 k,{0,0,1}].#&/@Reverse[p2],{k,0,2}],
Polygon/@Table[RotationMatrix[2π/3 k,{0,0,1}].#&/@p3,{k,0,2}],
Polygon/@Table[RotationMatrix[2π/3 k,{0,0,1}].#&/@hex,{k,0,2}]
}]}]]

solid

solid/.Polygon[x_]:>Norm/@N[Subtract@@@Partition[x,2,1,1]]

v=Union[RootReduce[Flatten[solid/.Polygon[x_]:>x,1]]];

Length[v]

Select[Subsets[v,{2}],Norm[Subtract@@#]<.01&]

Show[Graphics3D[{solid,MapIndexed[Text[#2[[1]],#]&,v]}]]

Csc[Pi/n]/Cot[Pi/n]

Through[{Csc,Cot,Sec}[Pi/9.]]

CompletePolygon[n_,p_]:=Module[{eqns,c,pts,x,y,z},
eqns=((#-{x,y,z}).(#-{x,y,z})==Csc[Pi/n]^2/4&/@Take[p,3]);
soln=NSolve[eqns,{x,y,z},WorkingPrecision->200];
c=RootApproximant[{x,y,z}/.soln[[1]]];
{c,Join[If[EvenQ[n],(2c-#)&/@p,Total[#]/2&/@Partition[(c+Sec[π/n](c-#))&/@p,2,1]],p]}
]

pent=Append[#,0]&/@Take[CirclePoints[Csc[Pi/5]/2,5],3]

CompletePolygon[5,pent]

Norm/@(Subtract@@@Partition[CompletePolygon[5,pent][[2]],2,1,1])//N

CompletePolygon[5,pent]

Graphics3D[{Polygon[CompletePolygon[5,pent][[2]]],PointSize[.02],Point[pent]}]

non=Append[#,0]&/@Take[CirclePoints[Csc[Pi/9]/2,9],5];

Norm/@(Subtract@@@Partition[CompletePolygon[9,non][[2]],2,1,1])//N

CompletePolygon[9,non]

Graphics3D[{Polygon@CompletePolygon[9,non][[2]],PointSize[.02],Point[non]}]

Norm/@(Subtract@@@Partition[CompletePolygon[9,non][[2]],2,1,1])//N

Norm/@(Subtract@@@Partition[v[[{3,1,24,21,22}]],2,1])//N

nonpts=v[[{3,1,24,21,22}]];

CoplanarQ[nonpts]//Quiet

eqns=((#-{x,y,z}).(#-{x,y,z})==Csc[Pi/9]^2/4&/@v[[{3,1,24}]])

NSolve[eqns,{x,y,z}]

N[Solve[eqns,{x,y,z}]]//Chop[#,1*^-6]&

{m,poly}=CompletePolygon[9,nonpts];

CoplanarQ[poly]//Quiet

CoplanarQ[Append[nonpts,m]]//Quiet

Graphics3D[{solid,PointSize[.02],Polygon[poly],Point[poly],{Red,Point[m]},MapIndexed[Text[#2[[1]],#+{0,0,.15}]&,poly]}]

Norm/@(Subtract@@@Partition[poly,2,1,1])//N

solid2=RootReduce[Join[solid,Polygon/@Table[RotationMatrix[2π/3 k,{0,0,1}].#&/@poly,{k,0,2}]]];

v=Flatten[solid2/.Polygon[x_]:>x,1]//Union

Length[v]

Show[Graphics3D[{FaceForm[Blue,Red],solid2,MapIndexed[Text[#2[[1]],#,Background->White]&,v]}]]

|

jabulani=RootReduce[Join[solid2,
{Polygon[v[[{1,3,9,13,10,4}]]]},
Polygon/@Table[RotationMatrix[2π/3 k,{0,0,1}].#&/@v[[{13,9,24,32}]],{k,0,2}],
Polygon/@Table[RotationMatrix[2π/3 k,{0,0,1}].#&/@v[[{32,24,22,20}]],{k,0,2}]
]]

Show[Graphics3D[{FaceForm[Blue,Red],jabulani,MapIndexed[Text[#2[[1]],#,Background->White]&,v]}]]

gc=GraphicsComplex[v,Polygon[Cases[jabulani,Polygon[c_]:>(c/.Thread[v->Range[Length[v]]])]]];

Graphics3D[gc,Axes->True,AxesOrigin->{0,0,0},Boxed->False]

Volume

?PolyhedronVolume

(vol=RootReduce@PolyhedronVolume[jabulani])//Timing

ToRadicals[vol]//FullSimplify

Centroid

?Centroid

(centroid=Centroid[gc,vol])//Timing

Graphics3D[gc0=gc/.GraphicsComplex[p_,poly_]:>GraphicsComplex[(#-centroid)&/@p,poly],Axes->True,AxesOrigin->{0,0,0},Boxed->False]

Distances to hexagon centers:

Norm/@(Select[Normal[gc0][[1]],Length[#[[1]]]==6&]/.Polygon[x_]:>Total[x]/6)//RootReduce//Union

Distances to nonagon centers:

Norm/@(Select[Normal[gc0][[1]],Length[#[[1]]]==9&]/.Polygon[x_]:>Total[x]/6)//RootReduce//Union

Net construction

t=(4/(Sqrt[3]))Sin[20Degree]Sin[50Degree]//FunctionExpand//FullSimplify

h=Sqrt[1-((((t-1)/2))^2)]

tr={{0,0},{1,0},{(1+t)/2,h},{(1-t)/2,h}};

trup={{0,0},{t,0},{(1+t)/2,h},{(t-1)/2,h}};

trrot=RotationMatrix[2π/3].#&/@tr;

truprot=RotationMatrix[2π/3].#&/@trup;

tr1=(#+v[[36]])&/@tr;

tr2=(#+v[[53]])&/@trup;

tr1rot=(#+v[[14]])&/@trrot;

tr1uprot=(#+v[[58]])&/@truprot;

tr2rot=(#-Subtract@@v[[{14,1}]])&/@tr1rot;

tr2uprot=(#-Subtract@@v[[{58,63}]])&/@tr1uprot;

trrotr=RotationMatrix[-2π/3].#&/@tr;

truprotr=RotationMatrix[-2π/3].#&/@trup;

tr3rot=(#+v[[27]])&/@trrotr;

tr4rot=(#+v[[23]])&/@trrotr;

tr5rot=(#+v[[16]])&/@trrotr;

tr3rotup=(#+v[[69]])&/@truprotr;

tr4rotup=(#+v[[71]])&/@truprotr;

tr5rotup=(#+v[[74]])&/@truprotr;

p9=-CirclePoints[Circumradius[9],9];

p5=CirclePoints[{0,Inradius[9]+Inradius[6]},1/Circumradius[6],6];

p92=(#-Subtract@@v[[{10,5}]])&/@p9;

p52=(#+Subtract@@v[[{17,2}]])&/@p5;

p53=(#-Subtract@@v[[{3,12}]])&/@p5;

p93=(#-Subtract@@v[[{6,30}]])&/@p9;

p94=(#-Subtract@@v[[{4,27}]])&/@p9;

p54=(#-Subtract@@v[[{1,31}]])&/@p5;

polys=Polygon/@{p9,p5,p92,p52,p53,p93,p94,p54,tr1,tr2,tr1rot,tr1uprot,tr2rot,tr2uprot,tr3rot,tr4rot,tr5rot,tr3rotup,tr4rotup,tr5rotup};
v=DeleteDuplicates[Flatten[polys[[All,1]],1]];
Graphics[{EdgeForm[Black],FaceForm[None],polys,MapIndexed[Text[#2[[1]],#,Background->White]&,v]}]

Graphics[{EdgeForm[Black],FaceForm[None],polys}]

net=RootReduce[Cases[,_Polygon,{1,∞}]]

?NetFromPolygons

newnet=NetFromPolygons[net]//RootReduce

Graphics[{FaceForm[None],EdgeForm[Black],newnet}]

Skeleton construction

SkeletonGraph[gc0,#]&/@{2.1,2.2,2.3}

SkeletonGraph[gc0/.GraphicsComplex[v_,p_]:>GraphicsComplex[{#1,#2,-#3}&@@@v,p],#]&/@{1.7,2.1,2.5,3}

RecognizeGraph@(g=SkeletonGraph[gc0,2.2])

EdgeList[g]

GraphEmbedding[g]

VertexCount[g]

HamiltonianGraphQ[g]

PolyhedronDataString

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

WriteString[file,PolyhedronDataString[gc0,
"Name"->"Jabulani polyhedron",
"StandardName"->"JabulaniPolyhedron",
"Classes"->{"Convex"},
Debug->True
]]

Close[file]