Here is an interactive graphic depicting Bianchi-Pinkall flat tori, rendered using Three.js and presented with MathCell:

The figure can be rotated by clicking and dragging with a mouse or swiping on a touch device, as well as zoomed in or out with a mouse wheel or pinching on a touch device. The integers on the buttons determine the overall symmetry of the surface, i.e. the number of lobes.

“Flat tori” are so named because they have zero Gaussian curvature in four-dimensional space. Here are several good online references for understanding the concepts behind the mathematics necessary to generate this graphic:

Pinkall — Hopf Tori in S3
Geometry of the Hopf Mapping and Pinkall’s Tori of Given Conformal Type
Bianchi-Pinkall Flat Tori in S3

One general parametrization of a flat torus on a unit 3-sphere in four dimensions is

[cosαcosγ, sinαcosγ, cosβsinγ, sinβsinγ]

where 0 ≤ α ≤ 2π , 0 ≤ β ≤ 2π and 0 ≤ γ ≤ π/2 . This represents a unit sphere because the sum of the squares of the four coordinates is one:

(cosαcosγ )2 +(sinαcosγ )2 +(cosβsinγ )2 +(sinβsinγ )2 =1

One way to show that it is geometrically flat is to sum of the squares of differentials of the four coordinates with γ constant

(cosγ dcosα )2 +(cosγ dsinα )2 +(sinγ dcosβ )2 +(sinγ dcosβ )2 =cos2γ dα2 +sin2γ dβ2 =dA2 +dB2

thereby producing a flat metric after rescaling of the variables of parametrization.

The interactive graphic uses a slightly different parametrization in which two variables are replaced with their sum and difference,

[cos(u+v) cosγ, sin(u+v) cosγ, cos(u-v) sinγ, sin(u-v) sinγ]

and then takes 0 ≤ u ≤ 2π and 0 ≤ v ≤ π . The third parameter is then chosen to take a oscillatory path in one of the variables,

γ=a +bsin2nv

and this is what produces the lobed structure of the final surface.

In order to visualize the surface, it must be projected from its four-dimensional space down to our three dimensions. One way to do this is with a typical stereographic projection

[x1-w , y1-w , z1-w]

but the modified stereographic projection

[rx, ry,rz] , r=cos 1w π1 -w2

produces output that remains about the same size as parameters are varied. And that’s all the math you need to generate the graphic!


Another way to visualize these tori is to draw the surface with low opacity and include lines spaced equally apart in the parameter v. This is inspired by illustrations in the Pinkall reference given above.

While this gets somewhat messy for tori with many lobes, it does emphasize how much detail there is at the heart of the figure. For tori with a small number of lobes, one can see the interlinking of the lines quite clearly, which is expected for the underlying Hopf fibration.

One can also easily visualize the curves over which the fibration is performed. These can be found by a typical Hopf mapping

[x,y, z,w] [2(xz +wy), 2(yz -wx), w2+z2 -x2-y2 ]

For the parametrization being used this produces

[sin2γcos2v, sin2γsin2v, cos2γ]

which describes points on a unit 2-sphere in three dimensions. This show clearly why the domain of v extends only to π, as well as why the third parameter γ was made dependent on v. Points on the 2-sphere correspond to individual lines in the previous graphic, and a complete curve produces an entire flat torus. Letting v run over its domain, these complete curves are

Fibrations over the points on these curves, projected from four-dimensional space to three dimensions, are what constitute the flat tori in the previous interactive graphics. Weird...


Some existing online visualizations of these tori were done with lower resolution on the surface, which can also exhibit interesting features of the geometry. This is easily replicated by rendering them as low-resolution wireframes:

This way one can simultaneously see lines of constant u and v as projected into three-dimensional space.

An animatable analytic extension of these tori is to let the index n vary continuously in time. With the surface rendered as a wireframe and a bit of rotation added, the result is


This even more fun zoomed far into the graphic:

Quite trippy with just a little bit of math...


Uploaded 2017.10.17 — Updated 2018.04.14 analyticphysics.com