Cuboctahedron

Author

Eric W. Weisstein
January 5, 2024

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

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

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

Figure

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

Polyhedron

PolyhedronData["Cuboctahedron","Orientations"]

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

Polyhedron

Graphics3D[{FaceForm[Green,Red],PolyhedronData["Cuboctahedron","Polyhedron"]}]

Region

PolyhedronData["Cuboctahedron","Region"]

Solid and Dual

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

UniformPolyhedron

uniform=UniformPolyhedron[stdname="Cuboctahedron"]

PolyhedronFaceTally[uniform]

UniformPolyhedron/@{
stdname,
UniformPolyhedronIndex[stdname,"Wenninger"],
{"Coxeter",UniformPolyhedronIndex[stdname,"Coxeter"]},
{"Kaleido",UniformPolyhedronIndex[stdname,"Kaleido"]},
{"Uniform",UniformPolyhedronIndex[stdname,"Maeder"]},
{"Wenninger",UniformPolyhedronIndex[stdname,"Wenninger"]}
}

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"]]

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

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

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

PolyhedronFaceTally[maeder]

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

Net

PolyhedronData["Cuboctahedron","Net"]

PolyhedronData["Cuboctahedron","Net","Colored"]

NetPrintout[PolyhedronData["Cuboctahedron","Polyhedron"],"Cuboctahedron.pdf"]

Properties

Initialization

<<MathWorld`Polyhedra`

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

vol=PolyhedronData[pname,"Volume"]

Centroid

PolyhedronData["Cuboctahedron","Centroid"]

RegionCentroid[PolyhedronData["Cuboctahedron","Polyhedron"]]

PolyhedronCentroid[PolyhedronData["Cuboctahedron","Polyhedron"]]

Circumradius

PolyhedronData["Cuboctahedron","Circumradius"]

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

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

ConvexHullOf

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

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

DehnInvariant

PolyhedronData[pname,"DehnInvariant"]

(dehn=DehnInvariant[p,Debug->True]//FullSimplify)//Timing

ToConwayBasis[dehn]

Complement[Select[PolyhedronData[All],PolyhedronData[#,"DehnInvariant"]==dehn&&PolyhedronData[#,"Volume"]==vol&],{pname}]

Dual

pname

dname=PolyhedronData[pname,"Dual","Name"]

PolyhedronData[pname,"Dual","Scale"]

midrs={PolyhedronData[pname,"Midradius"],PolyhedronData[dname,"Midradius"]}

Divide@@midrs//FullSimplify

GraphicsRow[With[{
s={Yellow,PolyhedronData[pname,"Midsphere"]},
style=Directive[Black,Italic,FontFamily->"Times",14]
},
{
Graphics3D[{s,Green,Opacity[.5],PolyhedronData[pname,"Polyhedron"]},Boxed->False,PlotLabel->TextCell[Style[PolyhedronData[pname,"Name"],style],PageWidth->200,TextAlignment->Center]],
Graphics3D[{s,Red,Opacity[.5],PolyhedronData[pname,"Dual","Polyhedron"]},Boxed->False,PlotLabel->Style[PolyhedronData[dname,"Name"],style]],
Graphics3D[{
{Green,Opacity[.5],PolyhedronData[pname,"Polyhedron"]},
{Red,Opacity[.5],PolyhedronData[pname,"Dual","Polyhedron"]},
s
},Boxed->False,PlotLabel->Style["compound with midsphere",style]],
Graphics3D[{
PolyhedronData[pname,"Polyhedron"],
PolyhedronData[pname,"Dual","Polyhedron"]
},Boxed->False,PlotLabel->Style["compound",style]]
}],Alignment->Top,ImageSize->800]

DihedralAngles

PolyhedronData["Cuboctahedron","DihedralAngles"]//Tally

DihedralAngles[PolyhedronData["Cuboctahedron","Polyhedron"]]//Tally

EdgeLengths

PolyhedronData["Cuboctahedron","EdgeLengths"]

PolyhedronData["Cuboctahedron","Lines"]/.Line[l_]:>EuclideanDistance@@l//FullSimplify//Union

Inradius

PolyhedronData["Cuboctahedron","Inradius"]

Insphere[PolyhedronData["Cuboctahedron","Polyhedron"]]

MyInsphere[PolyhedronData["Cuboctahedron","Polyhedron"]]//RootReduce//Timing

InertiaTensor

PolyhedronData["Cuboctahedron","InertiaTensor"]

PolyhedronInertiaTensor[PolyhedronData["Cuboctahedron","Polyhedron"]]//Timing

((MomentOfInertia[PolyhedronData["Cuboctahedron","Polyhedron"]])/(Volume[PolyhedronData["Cuboctahedron","Polyhedron"]]))//RootReduce//Timing

MeanCylindricalRadius

PolyhedronData[pname,"MeanCylindricalRadius"]

N[%]

Integrate over polyhedron [unevaluated]

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

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

Divergence theorem [wrong integral]

bug(439600): Integrate[(1/Sqrt[2])*((1/4)*(1 + t)*Sqrt[s^2 + s*(-1 + t) + (1/2)*(1 + t^2)] - (1/8)*(-1 + 2*s + t)^2*Log[(1/2)*(-1 - t + Sqrt[2]*Sqrt[1 + 2*(-1 + s)*s + 2*s*t + t^2])]), {t, 0, 1}, {s, 0, 1 - t}, GenerateConditions -> True] gives wrong result

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

Divergence theorem [wrong integral]

bug(439600): Integrate[(1/Sqrt[2])*((1/4)*(1 + t)*Sqrt[s^2 + s*(-1 + t) + (1/2)*(1 + t^2)] - (1/8)*(-1 + 2*s + t)^2*Log[(1/2)*(-1 - t + Sqrt[2]*Sqrt[1 + 2*(-1 + s)*s + 2*s*t + t^2])]), {t, 0, 1}, {s, 0, 1 - t}, GenerateConditions -> True] gives wrong result

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

N[rxy]

Boole one at a time

{{xmin,xmax},{ymin,ymax},{zmin,zmax}}=MinMax/@Transpose[PolyhedronCoordinates[p]]

ineq=PolyhedronData[pname,"RegionFunction"][x,y,z]

(i1=Integrate[Boole[ineq](Sqrt[(x^2)+(y^2)]),{z,zmin,zmax}]//FullSimplify)//Timing

NIntegrate[(i1/vol),{x,xmin,xmax},{y,ymin,ymax}]

(i2=Integrate[(i1/vol),{x,xmin,xmax},{y,ymin,ymax}])//Timing

TrigToExp[i2]

N[expr=(1/10)+(3/(20 (Sqrt[2])))+(1/32) (Log[(Sqrt[2])-1]-Log[2]/2)-(1/32) (Log[(Sqrt[2])+1]-Log[2]/2)+(3/80) Log[1+(Sqrt[2])]+((Log[1+(Sqrt[2])])/(2 (Sqrt[2])))]

FullSimplify[expr]

N[%]

CAD

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

((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

N[rxy,20]

FullSimplify[rxy]

CAD over  1/16

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

cad=CylindricalDecomposition[reg,{x,y,z},"Function"]

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

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

rxy//FullSimplify

Simplify`SimplifyCount[rxysimp3]

MeanSquareCylindricalRadius

PolyhedronData[pname,"MeanSquareCylindricalRadius"]

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

MeanSphericalRadius

PolyhedronData[pname,"MeanSphericalRadius"]

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

Integrate over polygon [unevaluated]

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

Divergence theorem [unevaluated integral]

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

CAD [unevaluated]

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

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

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

CAD over  1/16 [unevaluated

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

Show[Graphics3D[{Opacity[.2],p}],RegionPlot3D[ImplicitRegion[reg,{x,y,z}],PlotPoints->50]]

((Volume[ImplicitRegion[reg,{x,y,z}]])/vol)//FullSimplify

cad=CylindricalDecomposition[reg,{x,y,z},"Function"]

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

$Version

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

Integrate over z first

{{xmin,xmax},{ymin,ymax},{zmin,zmax}}=MinMax/@Transpose[PolyhedronCoordinates[p]]

ineq=PolyhedronData[pname,"RegionFunction"][x,y,z]

(i1=Integrate[Boole[ineq](Sqrt[(x^2)+(y^2)+(z^2)]),{z,zmin,zmax}])//Timing

(ii1=FullSimplify[i1])//Timing

NIntegrate[(ii1/vol),{x,xmin,xmax},{y,ymin,ymax}]

(i2=Integrate[(ii1/vol),{x,xmin,xmax},{y,ymin,ymax}])//Timing

MeanSquareSphericalRadius

PolyhedronData[pname,"MeanSquareSphericalRadius"]

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

Midradius

PolyhedronData["Cuboctahedron","Midradius"]

Midsphere[PolyhedronData["Cuboctahedron","Polyhedron"]]//RootReduce//Timing

SurfaceArea

PolyhedronData["Cuboctahedron","SurfaceArea"]

RootReduce[%]

SurfaceArea[PolyhedronData["Cuboctahedron","Polyhedron"]]//RootReduce//Timing

Total[Area/@PolyhedronData["Cuboctahedron","Polygons"]]//RootReduce//Timing

VertexSubsetHulls

subsethulls=PolyhedronData[pname,"VertexSubsetHulls"]

v=PolyhedronData[pname,"Vertices"];

Rule[#,Length[#2]]&@@@subsethulls

Rule[#,Graphics3D[Function[f,ConvexHullRegion[v[[f]]]]/@#2]]&@@@subsethulls

subsethulls2=Flatten[Function[{pn,l},Rule[pn,#]&/@l]@@@subsethulls]

Rule[#,Graphics3D[{{Opacity[.3],{Green,p}},Blue,ConvexHullRegion[v[[#2]]]}]]&@@@subsethulls2

Convex hull

Graphics3D[convexhullreg=ConvexHullRegion[v=PolyhedronData[pname,"Vertices"]]]

v=PolyhedronCoordinates[convexhullreg]

Flatten[(convexhullreg[[2]]/.i_Integer:>v[[i]])/.Thread[PolyhedronData[pname,"Vertices"]->Range[PolyhedronData[pname,"V"]]]]//Union

%===Range@Length@v

PolyhedronData[pname,"ConvexHull","Name"]

Platonic

(h=VertexSubsetHulls[p,"Platonic","Skip"->{}])//Timing

Volume

PolyhedronData["Cuboctahedron","Volume"]

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

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

Faces

PolyhedronFaceList[poly]

Show[GraphicsArray[partition[PolyhedronFaces[poly],5]]]

Projections

PolyhedronProjectionGraph[PolyhedronData["Cuboctahedron","Polyhedron"],#,"Simplification"->FullSimplify]&/@{{0,0,1,π/4},{0,1,0},{7,3,5 (Sqrt[2]),π-ArcTan[((4 (Sqrt[(2/3)]))/3)]},{1,0,(Sqrt[2]),π/2},{1,1,((Sqrt[2])/3),π-ArcTan[(Sqrt[10])]},{3,5,(Sqrt[2]),π/2+ArcTan[(Sqrt[2])]},{0,1,1},{1,0,((Sqrt[2])/3),π/2},{0,(Sqrt[2]),1}}

GraphData["CuboctahedralGraph","Graph","Perspective"]

Vertex subset hulls

Platonic

VertexSubsetHulls[PolyhedronData["Cuboctahedron","Polyhedron"],"Platonic"]//Timing

Inscribed in Rhombic Dodecahedron

g=Show[Graphics3D[{
PointSize[.03],Point/@Centroid/@Polyhedron[RhombicDodecahedron],
Wireframe[Polyhedron[RhombicDodecahedron]],
RotateAboutAxis[#,{0,0,1},Pi/4]&/@Polyhedron[Cuboctahedron]/.Polygon[x_]:>Polygon[Sqrt[2/3]x]
}],Boxed->False]

LiveGraphics3D

<<Utilities`LiveGraphics3D`

WriteLiveForm["cubrhomb.m",g]

Circumscribed around an Octahedron

g=Show[Graphics3D[{Polyhedron[Octahedron],Wireframe[Polyhedron[Cuboctahedron]],
PointSize[.03],Point/@PolyhedronVertices[Octahedron]
}],Boxed->False]

LiveGraphics3D

<<Utilities`LiveGraphics3D`

WriteLiveForm["octincub.m",g]

Construction

CuboctahedronExact:=CuboctahedronExact=Module[{sq2=Sqrt[2]},OrientCentered[{Polygon[{{-1,1,-sq2},{1,1,-sq2},{1,-1,-sq2},{-1,-1,-sq2}}/2],Polygon[{{-1,1,sq2},{1,1,sq2},{1,-1,sq2},{-1,-1,sq2}}/2],Polygon[{{2,0,0},{1,-1,-sq2},{0,-2,0},{1,-1,sq2}}/2],Polygon[{{0,-2,0},{-1,-1,-sq2},{-2,0,0},{-1,-1,sq2}}/2],Polygon[{{-2,0,0},{-1,1,-sq2},{0,2,0},{-1,1,sq2}}/2],Polygon[{{0,2,0},{1,1,-sq2},{2,0,0},{1,1,sq2}}/2],Polygon[{{1,-1,sq2},{1,1,sq2},{2,0,0}}/2],Polygon[{{-1,-1,sq2},{-1,1,sq2},{-2,0,0}}/2],Polygon[{{-1,-1,sq2},{1,-1,sq2},{0,-2,0}}/2],Polygon[{{-1,1,sq2},{1,1,sq2},{0,2,0}}/2],Polygon[{{1,-1,-sq2},{1,1,-sq2},{2,0,0}}/2],Polygon[{{-1,-1,-sq2},{-1,1,-sq2},{-2,0,0}}/2],Polygon[{{-1,-1,-sq2},{1,-1,-sq2},{0,-2,0}}/2],Polygon[{{-1,1,-sq2},{1,1,-sq2},{0,2,0}}/2]}]]