Polytwisters
What are polytwisters?
Polytwisters are a family of curved shapes that exist in
four spatial dimensions. They were discovered in 2000 by
Jonathan Bowers, an American mathematician known for his work on polytopes in higher
dimensions. Check
his original polytwisters page.
If you are entirely new to 4D Euclidean space, I recommend the following
resources:
The 4D analogy of the sphere is known as the
3-sphere. On the ordinary sphere, a great circle is a circle with the same
radius as the sphere itself, dividing it into two hemispheres. Any two
distinct great circles on a sphere must intersect at exactly two points. On
the 3-sphere, it is possible for two great circles on the 3-sphere to not
intersect each other at all. As the 3-sphere is a dimension "bigger" than the
sphere, there is far more room for these circles.
In fact, it is possible to divide the 3-sphere into infinitely many great
circles so that no two of them overlap each other and the circles cover the
entire 3-sphere. This is Hopf fibration, and these circles are called
Hopf fibers.
Even stranger, there exists a highly symmetrical one-to-one mapping from Hopf
fibers to points on the ordinary sphere. This is the
Hopf map. If we have a polyhedron whose vertices are on a sphere, we
can invert the Hopf map to convert that collection of vertices to a set of
Hopf fibers which we call rings.
Polytwisters are a four-dimensional analogy to polyhedra which, in place of
"vertices," have rings. In place of a polyhedron's edges which connect two
points, two rings may be connected by a strip, which is a
two-dimensional surface topologically equivalent to an open cylinder. Finally,
a set of strips joined end-to-end form a twister, which is a
polytwister's equivalent of a polygonal face.
Mathematical definition of polytwisters
A major part of this project was establishing a formal definition of
polytwisters for the first time. This section defines convex polytwisters, and
less formally describes strips, twisters, and nonconvex polytwisters. It is
intentionally terse because as of October 2025, I am working on a paper which
elaborates greatly on this.
Equate and with . Define the
equivalence relation on as true
iff there exists such that , i.e. is a phase rotation of .
The partition divides the space into fibers.
Reinterpreted in , fibers are geometric circles centered on
the origin, except for one trivial fiber comprising the origin; the
rest we refer to as nontrivial fibers.
Taking only the fibers of unit radius gives us the Hopf fibration,
partitioning the 3-sphere into infinitely many great circles. The Hopf map is
actually not necessary to understand or define polytwisters, so I will not
discuss it here.
Given define a log and a
pipe respectively as:
where . The
pipe viewed in is the Cartesian product of a unit
circle and a plane, and the log is the Cartesian product of a
closed unit disk and a plane. All other pipes and logs are respectively of the
form and where and is a positive real number. Crucially, all logs and
pipes are unions of fibers.
We can now define a convex polytwister:
Definition. A convex polytwister is an intersection of a
finite set of three or more logs, but not equal to the intersection of fewer
than three logs.
The key to this is the analogy to the definition of
"-polytopes," which may be defined as the bounded intersection
of finitely many closed half-spaces. (See Ziegler's
Lectures on polytopes for an introduction.) The polytwister
equivalent of a closed half-space is a log, and the equivalent of a hyperplane
is a pipe.
Just as two planes in general position in 3D space intersect at lines and
three planes intersect at a point, the intersection of pipes allows us to
produce lower-dimensional shapes. An important fact, although not an obvious
one at all, is that three pipes in general position intersect at exactly two
nontrivial fibers (sometimes zero or one, but those cases are irrelevant to
polytwisters). You can see a visual of this in the order 3 dyadic twister,
which is the simplest convex polytwister; the solid is the intersection of
exactly three logs . The two fibers in the
set appear as "vertices" on the boundary of
the figure, which we properly call rings.
Taking further set operations on pipes and logs gives us the face lattice of
the polytwister. A strip can be formed as the intersection of two pipes and at
least one log, such as . In
it is an embedding of the cylinder, and its topological boundary is two
fibers. Unlike line segments, strips are not uniquely determined by their
boundary: there are infinitely many strips between a pair of fibers, and they
bow out in different amounts depending on the orienation of the pipes.
Finally, a twister (2-face) is formed by the intersection of one pipe and two
or more logs, such as , and its boundary is
a set of two or more strips. (I am being informal here and leaving out some
degeneracy conditions.)
Nonconvex polytwisters are defined roughly as
abstract 3-polytopes
with a realization that maps each facet (twister) to a pipe called its
"containing pipe," each edge to a strip, and each vertex to a ring (fiber),
such that each strip's incident rings are precisely its boundary, and each
twister's incident strips are subsets of its containing pipe.
All polytwisters shown in this application are uniform, which means
their symmetry group acts transitively on their rings and on their strips.
About the application
This application is open source, MIT license. Check the
source code.
The renderer is a GLSL fragment shader which implements a classical raytracer,
using closed-form expressions to compute intersections of rays and logs. A
cross-section of a log is an affine transformation of an infinite cylinder,
and polytwisters are formed by Boolean operations on logs, so rendering
polytwisters is no more difficult than raytracing cylinders. No discrete
meshes are used, although a mesh generation feature is under way.
Uniform polytwisters are generated on the fly from the symbols alone, using a
variant of the Wythoff construction to determine ring locations and
combinatorial structure. The
internal database of polytwisters
contains only their names and symbols.
Thanks foremost to
Jonathan Bowers
for giving me access to his original POV-Ray code and answering my many
questions. I'm also grateful to members of the
Polytope Wiki
and Discord for their assistance, in particular galoomba, Violeta, PlanetN9ne,
ThePokemonkey123, and Mecejide.
Changelog
v0.2.2 (2025-11-19): App now initially opens to the quasi ditrigonary
icosidodecatwister rather than the more plain-looking tetratwister. Colors of
twisters adjusted to reduce ugly combinations. Article now displays when
JavaScript is disabled. Partially fix flash of unstyled content.
v0.2.1 (2025-11-02): Cross-sections are now symmetrically rotated so there is
always a ring in the xy-plane.
v0.2.0 (2025-10-13): Major rework of user interface.
2025-10-04: All 222 uniform polytwisters and three infinite families are
implemented.
2025-06-13: Added 142 uniform polytwisters.
2025-04-09: Total rewrite.
2024-05-04: Initial launch.