loop-animation

無限ズームInfinite Zoom

多角形の辺上の点を結んで一回り小さい多角形を作る操作を繰り返し、その入れ子の渦へ無限に吸い込まれていくループアニメーションです。

Canvas 2D で、図形を 1 つずつ計算して描いています。初期設定で再生しています。

辺上の点を結んで入れ子にした多角形の渦へ、どこまでも吸い込まれていく

このシーンで作る

パラメータ、色、エフェクトを変えて、GIF・APNG・WebP・MP4・WebM で書き出せます。

どう計算しているか

  1. 正多角形の各辺を「ねじれ」の割合で分ける点をとり、それらを結ぶと、少し小さく少し回った正多角形ができます。これを何段も繰り返すと、渦巻き状の入れ子になります。
  2. 1段ごとの縮小率 s と回転角 φ は、隣り合う頂点を (1 − f) と f の割合で混ぜたベクトルの長さと角度として、cos と sin から一度だけ計算します。
  3. l 段目の多角形は半径 R0·s^(l − z)、回転角 (l − z)·φ で描きます。z を時間とともに増やすと全ての段が少しずつ拡大しながら回り、奥へ進むように見えます。
  4. 「塗り」では前景色と背景色を段ごとに交互に使い、「1ループで進む段数の倍数」で1ループに進む段数を変えられます。
r_l = R0·s^(l − z),  θ_l = (l − z)·φ,  z = ease(t)·段数

ループがつながる理由

この図形は自己相似(一部を拡大すると全体と同じ形になる性質)なので、ちょうど1段進むと元の絵とぴったり重なります。1ループで色数の整数倍の段だけ進めるため、形だけでなく色の並びも最初と一致します。

調整できるパラメータ

形

辺の数3 〜 8(初期値 4)
ねじれ0.02 〜 0.5(初期値 0.1)
塗り塗り・線
線幅0.5 〜 12(初期値 2)

動き

1ループで進む段数の倍数1 〜 4(初期値 1)
イージングlinear・sine・quad・cubic・quint・expo・back・elastic

同じ分類のシーン(放射・回転)