# [GIF] Step Out (Recursive triangle morph)

Posted 1 year ago
2346 Views
|
|
5 Total Likes
|
 Step OutA follow-up to Advance. In Advance I recursively defined a nested sequence of squares by having the midpoint of each edge of the previous square be a vertex of the next square. Of course, there's no reason that the vertex at the next level has to be at the midpoint: we can put it at any fixed ratio of the distance along an edge and get a whirl.The other part of Advance was to have each midpoint move radially outward until the convex hull of the original vertices and the scaled midpoints formed a new square. As @Sander Huisman pointed out in the comments, one could do the same for any $n$-gon and get a nice periodic motion. We could just as well form the nested collection by putting the vertices at the next level at any fraction $w$ of the way along the edges of the previous level, and we could use that same point along the edge as the point to scale up to get new $n$-gons.In general, this does not give a periodic motion, but for certain special values of $w$ it does. When $n=3$, the values of $w$ that give periodic motion seem to be $1/2$, $1/3$, and $\frac{1}{2}(1-\frac{1}{\sqrt{3}})$. The animation above is the one you get from $w=\frac{1}{2}(1-\frac{1}{\sqrt{3}})$.Here's the code (notice that in the code I'm using $2w$ in the definition of WeightedMidpoints): smootherstep[x_] := 6 x^5 - 15 x^4 + 10 x^3; WeightedMidpoints[pts_, w_] := Mean[({w #, (2 - w) RotateLeft[#]} &)[pts]] DynamicModule[ {n = 3, w = 1 - 1/Sqrt[3], depth = 100, cols = RGBColor /@ {"#537780", "#FFFCCA"}, pts, t}, Animate[ pts = Nest[2 WeightedMidpoints[#, w] &, 2 Sqrt[2.] CirclePoints[n], Floor[s]]; t = smootherstep[Mod[s, 1]]; Graphics[ {Table[ {FaceForm[If[OddQ[i], cols[[1]], cols[[2]]]], Polygon[Riffle[#[[i]], (1 + t) WeightedMidpoints[#[[i]], w]]]}, {i, 1, Length[#]}] &@NestList[WeightedMidpoints[#, w] &, pts, depth]}, PlotRange -> .25, ImageSize -> 540], {s, 0, 4}] ]