
Stay Upright
As with Light Show, I'm starting with a collection of Hopf circles on the 3-sphere, taking the 2-planes in
$\mathbb{R}^4$ they determine (note that a Hopf circle always determines a complex line in
$\mathbb{C}^2$, so these 2-planes are complex lines), and intersecting those 2-planes with the hyperplane
$w=1$, which gives a collection of lines in 3-space (actually in projective 3-space, but I'm just ignoring the lines at infinity). In Light Show I was taking equally-spaced Hopf circles on the Clifford torus, whereas in this animation I'm taking a single circle on each of the tori interpolating between the unit circle in the
$xy$-plane and the unit circle in the
$zw$-plane (the unit circle in the
$xy$-plane corresponds to a line at infinity; after the lines go off the screen they actually shoot off to infinity).
In fact, due to rendering issues I'm orthogonally projecting the lines in 3-space to the plane normal to what would be the ViewPoint
vector if this were a Graphics3D
object: hence the viewpoint
and plane
variables. Here's the code:
DynamicModule[{n = 60, a = ?/4, viewpoint = {1, 1.5, 2.5}, ? = 1.19, r = 2.77, plane,
cols = RGBColor /@ {"#f43530", "#e0e5da", "#00aabb", "#46454b"}},
plane = NullSpace[{viewpoint}];
Manipulate[
Graphics[
{Thickness[.003],
Table[{Blend[cols[[;; -2]], r/?],
InfiniteLine[
RotationMatrix[?].plane.# & /@ {{Cot[r] Csc[a], 0, Cot[a]}, {0, Cot[r] Sec[a], -Tan[a]}}]},
{r, ?/(2 n) + s, ?, 2 ?/n}]},
Background -> cols[[-1]], PlotRange -> r, ImageSize -> 540],
{s, 0., 2 ?/n}]
]