Our purpose here is to elaborate a classic Python framework for storing and writing geometric information in a variety of formats, suitable for ray tracing and use within CAD programs.
The target architecture we want to model is Flextegrity, a tension-compression lattice based on holding compression islands in relative positions, in an all-way space. Its inventor is Sam Lanahan.
The specific output from Python is Scene Description Language used by POV-Ray. You may provision your computer with these free components from original web sources or in the form of Docker containers.
CCP (Cubic Close Packing)
The general case CCP lattice will form our background. The cubic closest packed matrix of balls serves as our “holodeck” (our substitute XYZ grid), for “tuning in” our Flextegrity lattices.
Where spheres touch, they define the diamond faces of a rhombic dodecahedron, each tangent to twelve neighbors. This marks the “high water mark” for sphere size (inter-tangency) and is the CCP itself.
As spheres begin to contract, without losing their fixed coordinates, we’re in a position to study alternative adjoining or holding strategies.
How might these spheres still connect to each other in a way that preserves their initial positions, and yet allow for abberrational distortions, i.e. flexibility? Our lattice is not brittle. Sam’s solutions find their roots in Tensegrity, and his own variations in that space, introducing springiness and curvature.
Elastic Interval Geometry
Tensegrity and Kenneth Snelson are also behind Elastic Interval Geometry, so named by me and one of its chief practitioners, Gerald de Jong.
That’s the same Gerald who contributed our tetravolumes computing algorithm, reminiscent of earlier algorithms for returning a tetrahedron’s volume from its six edges.
CCP in Architecture
The center-to-center strategy is well known to some architects as a space frame patented as the “octet truss” by R. Buckminster Fuller, and featured as “kites” in earlier studies by Alexander Graham Bell.
NASA went with the octet truss as a basic space frame for orbiting space station designs.
This lattice also went by the name of Isotropic Vector Matrix (IVM) in the philosophical language of Synergetics, pioneered by U.S. Medal of Freedom winner R. Buckminster Fuller (RBF).
More curvilinear versions were employed in geodesic dome structures. We see more examples of the “octet truss” at PDX (the Portland airport) and at the Business Accelerator building (PSU).
Sam Lanahan pioneered a three-way weaving of mutually orthogonal truss members, called struts in some models, that suggest different, possibly flexible, materials.
Flexibility means countouring, as road pavement matches the contour of the underlying topography.
Cubic Reference Cells
Our cubic reference cell, surrounding any compression island, is defined by the short diagonals of the rhombic dodecahedron’s diamond faces.
The cube and dodeca have relative volumes 3 and 6 (1 and 2). Each dodeca carves out 1/6th of the six face-adhering neighboring reference cubes, pictured as void (no balls therein). This effectively describes the rhombic dodecahedron: a reference cube with six sixths added (so double the cube’s volume).
The rhombic dodecahedron is the space-filler associated with the CCP, with each ball nested snugly inside one. Diamonds have long and short diagonals. The twelve short ones define our reference cube. The twelve long ones define an octahedron.
Relative the tetrahedron of four CCP balls, intertangent, the rhombic dodecahedron is six tetravolumes, the cube three, the octahedron four.
From the Fuller Archives:
Consider an icosahedron with its three XYZ golden rectangles parallel to those of our reference cube. If the rectangles terminate in the cube’s faces, then connecting bands to adjacent cube edges will provide a mechanism for inter-icosahedron joining.
As the icosahedrons grow such that their phi rectangles protrude through the cubes’ faces, into the neighboring cube domains, all six of which are void (empty of sphere centers), the bands from golden rectangle termini, to the surrounding reference cube edges, will potentially slant, like the sides of a tent from a ridge pole, but not as steeply.
This slanting band will meet another at 180 degrees, coming from a neighboring icosahedron. Twelve icosahedron’s around a nuclear icosahedron, will be held in place in this way.
When the compression island icosahedrons have their phi rectangles flush to the reference cube faces, the X, Y, Z strutworks of the Flextegrity system stay flat, unzigzaggy. Allowing the compression islands to vary in diameter is what introduces the zigzagging.
The Python framework we’re developing has a generic purpose, of introducing simple vectorial geometry in conjunction with the Concentric Hierarchy well-known to School of Tomorrow students. The content is in the form of a Jupyter Notebook on Github.
The skeletal Polyhedron class below is meant to be subclassed and further fleshed out. This inherited piece provides mechanisms for resizing and translating the beast. You may imagine adding rotation, as you learn more about vector-based computations based on technologies invented by Heaviside-Gibbs.
Python allows operator overloading such that multiplying a Polyhedron object by a scalar using the asterisk triggers
__rmul__ inside the class.
The scalar is say an int or float, and will clone the target polyhedron but for its size (its center coordinates remain unchanged).
A new Polyhedron is delivered, following a more functional model emphasizing immutability of state, and ditto in the case of translation, optionally addable rotation.
Throw away the old one if you don’t need it, or let the garbage collector do it. The alternative, changing a polyhedron in place by default, is considered poor practice by today’s lights.