Hilbert's 3rd Problem asks which polyhedra can be cut up an reassembled into other polyhedra. The problem was solved by Max Dehn in 1901 with what are now called Dehn invariants. A write-up can be found at Dehns Dissection Theorem.
The Dehn invariant of a polyhedron is the total of the tensor products of the edge lengths and "adapted" dihedral angles. But that's too complicated at this hour of the night. But products of the edge lengths and dihedral angles, that I can do.
DehnCalculator[name_] :=
Module[{faceindices, dihedralanglerules, vertexindices, anglelist,
joinedfaces, edges, edgelengths, edgelengthsfromfaces,
simplifiededgelengths},
edgelengths = PolyhedronData[name, "EdgeLengths"];
faceindices = PolyhedronData[name, "FaceIndices"];
dihedralanglerules = PolyhedronData[name, "DihedralAngleRules"];
anglelist = Last /@ dihedralanglerules;
joinedfaces = First /@ dihedralanglerules;
edges = (Intersection @@ faceindices[[#]]) & /@ joinedfaces;
vertexindices = PolyhedronData[name, "VertexIndices"];
edgelengthsfromfaces = (EuclideanDistance @@
vertexindices[[#]]) & /@ edges;
simplifiededgelengths =
Nearest[edgelengths, #] & /@ edgelengthsfromfaces;
{name, N[Total[simplifiededgelengths anglelist]/Pi, 30][[1]]}
];
The tricky part is syncing the edges with the dihedral angles. But there's the code. So -- which polyhedra have nice numbers under my crude Dehn invariant calculator? Here's a piece of analytic code:
Grid[Reverse /@ Select[DehnCalculator[#] & /@ PolyhedronData[], Chop[Last[#] - Round[Last[#]]] == 0 &]]
And here is the result.
6.00000000000000000000000000000 AcuteGoldenRhombohedron
18.0000000000000000000000000000 AugmentedTruncatedTetrahedron
46.0000000000000000000000000000 BiaugmentedTruncatedCube
6.00000000000000000000000000000 Cube
30.0000000000000000000000000000 CubeFiveCompound
24.0000000000000000000000000000 {CubeFourCompound,1}
24.0000000000000000000000000000 {CubeFourCompound,2}
36.0000000000000000000000000000 CubeSixCompound
60.0000000000000000000000000000 CubeTenCompound
18.0000000000000000000000000000 CubeThreeCompound
12.0000000000000000000000000000 CubeTwoCompound
18.0000000000000000000000000000 ElongatedDodecahedron
30.0000000000000000000000000000 GreatDodecahedron
150.000000000000000000000000000 GreatRhombicosidodecahedron
54.0000000000000000000000000000 GreatRhombicuboctahedron
8.00000000000000000000000000000 Gyrobifastigium
6.00000000000000000000000000000 ObtuseGoldenRhombohedron
48.0000000000000000000000000000 PentagonalPrismSixCompound
4.00000000000000000000000000000 {Prism,3}
8.00000000000000000000000000000 {Prism,5}
10.0000000000000000000000000000 {Prism,6}
12.0000000000000000000000000000 {Prism,7}
14.0000000000000000000000000000 {Prism,8}
16.0000000000000000000000000000 {Prism,9}
18.0000000000000000000000000000 {Prism,10}
16.0000000000000000000000000000 RhombicDodecahedron
160.000000000000000000000000000 RhombicEnneacontahedron
72.0000000000000000000000000000 RhombicHexecontahedron
30.0000000000000000000000000000 RhombicIcosahedron
48.0000000000000000000000000000 RhombicTriacontahedron
30.0000000000000000000000000000 SmallStellatedDodecahedron
30.0000000000000000000000000000 SquashedDodecahedron
24.0000000000000000000000000000 TruncatedOctahedron
So, theoretically, each of these polyhedra could be cut up and glued together to make a cube. It turns out that over at Demonstrations, solutions for quite a few of these can be found at cube dissections. Many of them are space-filling polyhedron. Of the space-filling polyhedra in PolyhedronData, only DehnCalculator["EscherSolid"] gives a weird value ~ 49.9817541506643924553741723588. Maybe there's a mistake in my code somewhere.
The next step might be to make this more accurate so that it works on arbitrary polyhedra such as the space-filling tetrahedra.