Morphing a "sheet of paper" into a torus
Edit I had some time so I've added full surface torus. Old code in edit history.
DynamicModule[{x = 2., l = 100., x2 = 2., l2 = 100., grid, fast, slow},
Grid[{{
Graphics3D[{
Dynamic[Map[{Blue, Polygon[#[[{1, 2, 4, 3}]]]} &,
Join @@@ (Join @@ Partition[#, {2, 2}, 1])
]&[
ControlActive[fast[l, l2], slow[l, l2]]]
]
}, PlotRange -> {{-7, 7}, {-7, 7}, {-1, 2}}, ImageSize -> 600,
Axes -> True, BaseStyle -> 18]
,
Column[{
Slider[Dynamic[x, (l = 10.^#; x = #) &], {.0001, 2.}],
Slider[Dynamic[x2, (l2 = 10.^#; x2 = #) &], {.0001, 2.}] }]
}}]
,
Initialization :> (
grid[l_, l2_, n_, m_] := Outer[Compose,
Array[RotationTransform[# Pi/l2, {0, 0, 1.}, {0, -l2, 0}] &, n, {-1, 1}],
Array[RotationTransform[# Pi/l, {1., 0, 0}, {0, 2, l}][{0, 2, 0}] &, m, {-1, 1}],
1];
fast[l_, l2_] = grid[l, l2, 10, 10];
slow[l_, l2_] = grid[l, l2, 50, 25];
)]
For < V.9
please switch Array
to Table
. This syntax for Array
was introduced, silently, in V.9
. linespace equivalent in MMA
Folding or mapping?
Mapping is simple. Say you have a rectangular piece of paper of width $a$ and height $b$, so that any point $P$ on the paper has the coordinates $(x,y)$ with $0\leq x\leq a$ and $0\leq y\leq b$ then you can simply use the same coordinates on the torus and identify $x=0$ with $x=a$ (and $y=0$ with $y=b$), respectively.
If you are thinking of the surface of a torus in 3D and you want to explicitly map a point on the paper onto the torus, you first need to parametrize the surface of the torus accordingly. If your torus is centered on $O=(0,0,0)$ with the "equatorial plane" in the $x-y$-plane, one possible parametrisation of the surface is given by $( R \cos\Phi + r \cos\Phi\cos\phi, R\sin\Phi - r \sin\Phi\cos\phi, r \sin\phi)$, where $R$ is the radius of the "centerline" and $r$ the radius of "tube".
Here, you can simply map $\Phi \leftrightarrow \frac{2\pi x}{a}$ and $\phi \leftrightarrow \frac{2\pi y}{b}$.
Now, folding (as in: building a paper model) is another story...