Message Boards Message Boards

GROUPS:

[GIF] Strange Duality

Posted 3 years ago
3089 Views
|
2 Replies
|
6 Total Likes
|

One-parameter family of quadrilaterals, starting and ending at the square

Strange Duality

This month's MCCC theme is "Go-To Polygon", which got me thinking about my favorite way of generating random polygons. As I've mentioned before, there is a correspondence between $n \times 2$ matrices with orthonormal columns (a.k.a., the Stiefel manifold $V_2(\mathbb{R}^n)$) and $n$-gons in the plane of perimeter 2. This is explained fairly abstractly in our paper and a little more concretely in this talk, but the upshot is that it's easy to generate random $n \times 2$ matrices with orthonormal columns, so it's easy to generate random $n$-gons.

Really, the particular $n \times 2$ matrix you pick doesn't matter: what's important is the plane in $\mathbb{R}^n$ that the columns span. If you pick a different (orthonormal) basis for the plane, you just rotate the corresponding polygon.

Now, in this story quadrilaterals are special. Since a quadrilateral corresponds to a 2-dimensional plane in $\mathbb{R}^4$, and since the orthogonal complement of a 2-plane in $\mathbb{R}^4$ is another 2-plane in $\mathbb{R}^4$, we see that in this formalism, every quadrilateral has a dual quadrilateral coming from orthogonal complementation.

In the case of the square, its dual quadrilateral is another square, given by reflecting in the $x$-axis. The above animation shows the one-parameter family of quadrilaterals given by the closed geodesic connecting the square to its dual. Here's the 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]];

Module[{frame, dualframe, n},
 frame = Transpose[
   ToReal[Sqrt[#]] & /@ 
    Table[1/2 E^(I θ), {θ, 0, 
      2 π - π/2, π/2}]];
 dualframe = DualFourFrame[frame];
 n = 6;
 Manipulate[
  Graphics[{FaceForm[None], 
    Table[{EdgeForm[
       Directive[JoinForm["Round"], cols[[Mod[i, 3, 2]]], 
        Thickness[.02]]], 
      Polygon[FrameToVertices[
        Cos[t + i π/n] frame + 
         Sin[t + i π/n] dualframe]]}, {i, 1, n}]}, 
   ImageSize -> {540, 540}, Background -> cols[[1]], 
   PlotRange -> {{-3/4, 5/4}, {-1, 1}}], {t, 0, π}]]
2 Replies

Beautiful and indeed a bit dissonant or dichotomous.

Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard

Group Abstract Group Abstract