Duals of Polyhedra
by pmoews, published
Here is a simple openSCAD program which outputs the "dual" of a set of points on a unit sphere. If the points are the vertices of an Archimedean solid the output is a Catalan solid. If the points are a solution to the Thomson problem, (see thing:22663, Thomson Problem Polyhedra), the output is the convex hull dual. If the points are the centers of the faces of a polyhedron all equidistant from the origin, the output
is the polyhedron.
More than one set of points can be used as input so as to output compound polyhedra or material common to two or more polyhedra. For example the Archimedean polyhedra cannot be output directly as their faces are not equidistant from the origin. However the Archimedean solids can be generated by treating each set of faces separately and combining them.
Some sample scad files and their outputs are provided. They are:
A program to generate a cuboctahedron from its face centers:
A program to generate a rhombic dodecahedron from the vertices of the cuboctahedron:
A program to generate the cuboctahedron - rhombic dodecahedron compound:
A program to generate the material common to a cuboctahedron and a rhombic dodecahedron:
The image at the upper left shows the four polyhedra. Note how the vertices of the cuboctahedron protrude through the centers of the faces of the rhomic dodecahedron in the compound polyhedron.
Compound_cuboctahedron_dual.stl needs to be printed with external support.
I don't guarantee that my views of what is going on here are correct as openSCAD often surprises me. The method used involves two concentric spheres, one arbitrary, and a unit sphere containing the points to be considered. A vector is drawn from the origin through a point on the unit sphere. At some distance away from the origin but less than the radius of the arbitrary sphere, a plane normal to the vector is created. All material that lies beyond the outer side of the plane is removed. The process is repeated until all of the points have been treated.
Similar results can be obtained with polyhedron commands but I like the simplicity of the method and the fact that it lets openSCAD work out all the triangles. Perhaps the method has other advantages.