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}]
]