How do I map the torus to a plane?

9.3k Views Asked by At

Please see my answer on Perlin noise first.

A bit of background. Imagine a solid texture, like an actual block of sky and cloud. If you "cut a sheet" of sky and display it as an image, you'd get something like this:

Now you want that "sheet of sky" to be repeatable, so you cut the sheet of sky by using a torus:

![torus][1]

I'm trying to remove the distortion that appears in the resulting image:

![distorted][2]

Because clearly the portion from the inner side of the donut is "thinner" than the outer side of the donut.

So I need to map the surface of a torus to a unit square. I'm not sure how to say this correctly but the mapping must be such that each tiny square $dS$ on the unit square must map to something non-square on the surface of the torus.

For a start, I looked at trying a mapping from u, v to spherical coordinates.. \begin{align} \theta&= 2 \cos^{-1} \sqrt{1-\zeta_x} \\ \phi&= 2\pi\zeta_y \end{align}

But that didn't seem to lead to a solution. [1]: https://i.stack.imgur.com/As1kC.png [2]: https://i.stack.imgur.com/fBiIy.png

2

There are 2 best solutions below

2
On BEST ANSWER

Everything below assumes that you have already cut two seams on the torus, so that it is homeomorphic to the unit square.

There is no local isometry (i.e. a map that preserves local distances and angles) between the torus and the unit square, or any flat domain for that matter. This is a consequence of Gauss's Theorema Egregium and the fact that the Gaussian curvature of the torus is not everywhere zero. Therefore, an infinitesimal patch in the unit square will have to get stretched, squeezed, or sheared when mapped to the torus. The Theorema Egregium is the same reason why you can't flatten a sphere without distortion, making a perfect map of the Earth impossible.

There is, however, a conformal map (i.e. a map that preserves angles but may not preserve lengths) between the torus and a flat rectangle. What this means is that you won't get the "stretching" sort of distortion you can see near the edges of your image, but the texture will look bigger in some places and smaller in others. A nice example is the first figure on CGAL's page on planar parameterization; observe that the squares remain squarish instead of being squeezed into rectangles or parallelograms. For the torus, a nice explicit formula should be possible if that's what you want.

3
On

John M. Sullivan's paper Conformal Tiling on a Torus (Bridges 2011) https://static1.bridgesmathart.org/2011/cdrom/proceedings/134/paper_134.pdf gives a forward conformal mapping from $(u,v)$ coordinates in an s~$s\times 1$ rectangle in the plane to $(x,y,z)$ coordinates in 3D space: $$x = s \cos(2\pi u/s) / w\\ y = s \sin(2\pi u/s) / w\\ z = \sin(2\pi v) / w$$ where $$w=\sqrt{s^2+1}-\cos(2\pi v)$$ which can be inverted by $$u = \frac{s}{2 \pi} \tan^{-1}\frac{y}{x} \\ v = \frac{\mathrm{sign}(z)}{2 \pi} \cos^{-1} \frac{ z^2 \sqrt{s^2+1} \pm \sqrt{1-z^2 s^2} }{z^2+1}$$ Conformal mappings preserve angles, taking infinitesimal circles to infinitesimal circles without stretching/squeezing distortion (which would give ellipses or worse). See the paper for plenty of pictures. I blogged about it with GLSL source code https://mathr.co.uk/blog/2016-12-05_calendar_2015_donut.html and video https://mathr.co.uk/blog/2013-04-18_rolling_torus.html (click picture).