Loop
As I've mentioned before, there's an identification between the Stiefel manifold
$V_2(\mathbb{R}^4)$ -- which consists of
$4 \times 2$ matrices with orthonormal columns -- and the moduli space of planar quadrilaterals. Of course, geodesics in the Stiefel manifold are easy to describe: given a starting matrix and an ending matrix, just rotate the first column of the starting matrix towards the first column of the ending matrix, while simultaneously rotating the second column of the starting matrix towards the second column of the ending matrix. If the plane spanned by the columns of the starting matrix is perpendicular to the plane spanned by the columns of the ending matrix, then this geodesic will be closed (periodic).
Anyway, the above GIF shows 9 points from the closed geodesic connecting the standard square to a rotated square, with the angle of rotation being a function of time. (Since 9 is odd, you can't actually see the target square; obviously this is not very useful for understanding the geodesic, but in my opinion is more aesthetically pleasing. Change n
to 2
if you just want to see the starting and ending squares.)
Here's the source code:
ToReal[z_] := {Re[z], Im[z]};
ToComplex[{x_, y_}] := x + I y;
FrameToEdges[frame_] := ToReal[ToComplex[#]^2] & /@ Transpose[frame];
FrameToVertices[frame_] := Accumulate[FrameToEdges[frame]];
DualFourFrame[frame_] := Orthogonalize[NullSpace[frame]];
Manipulate[Module[{fr, dfr, dfrrot, cols, θ},
fr = {{1/Sqrt[2], 1/2, 0, 1/2}, {0, 1/2, 1/Sqrt[2], -1/2}};
dfr = {{0, -1/2, 1/Sqrt[2], 1/2}, {-1/Sqrt[2], 1/2, 0, 1/2}};
cols = RGBColor /@ {"#E5FCC2", "#547980"};
dfrrot = dfr.Transpose[RotationMatrix[θ, dfr]];
θ = π/
2 + π/2 (1/2 - 1/2 Cos[π (s - Floor[s])] + Floor[s]);
n = 9;
Graphics[{FaceForm[None],
EdgeForm[Directive[JoinForm["Round"], cols[[1]], Thickness[.01]]],
Table[Module[{verts},
verts = FrameToVertices[Cos[t] fr + Sin[t] dfrrot];
Polygon[-Mean[verts] + # & /@ verts]], {t,
0, π - π/n, π/n}]}, ImageSize -> {540, 540},
PlotRange -> 1/Sqrt[2], Background -> cols[[2]]]], {s, 0, 2}]