loop-animation

転がる多角形Rolling Polygons

正多角形が地面に接した角を支点に一辺ぶんずつ倒れて転がり、行ごとに時間差をつけて進んでいくアニメーションです。

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

三角・四角・六角形が角を支点にパタパタと転がり、行ごとに時間差で進む

このシーンで作る

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

どう計算しているか

  1. 正 n 角形は「辺の数」n と「辺の長さ」a から、外接円の半径 R = a / (2·sin(π/n)) と、中心から辺までの距離 R·cos(π/n) を求めて描きます。底辺が地面に接するように置きます。
  2. 1回の転がりでは、底辺の右端の頂点を支点にして 360°/n だけ回します。回すと次の辺がちょうど地面に着きます。回転量にはイージングをかけ、パタンと倒れる動きにしています。
  3. 1ループのあいだに「間隔(辺の何倍か)」と同じ回数だけ転がります。転がるたびに支点を辺の長さ a ずつ右へ移します。
  4. 「行ごとの時間差」で行ごとに時刻をずらし、「列ごとの時間差」で同じ行の中でも左から順に遅らせます。「行ごとに逆向き」がオンのときは、奇数行を左右反転して逆向きに転がします。
θ = ease(u·sp − j)·360°/n,  支点 x = x0 + j·a  (j = ⌊u·sp⌋)

ループがつながる理由

360°/n は正 n 角形の対称な角度なので、一辺ぶん転がるたびに形は元と同じ向きに戻ります。1ループで「間隔」回転がると、隣の多角形がいた位置までちょうど移動します。列ごとの遅れは、ずれを含めた時刻を 0〜1 に収めて切り詰める(clamp)ため、どの列もループ内で転がり終えます。

調整できるパラメータ

形

辺の数3 〜 8(初期値 4)
辺の長さ15 〜 200(初期値 60)
間隔(辺の何倍か)2 〜 8(初期値 3)
行数1 〜 20(初期値 7)
行の間隔1.2 〜 4(初期値 2.2)
地面の線オン/オフ(初期値 オン)
線幅0.5 〜 10(初期値 3)

動き

行ごとの時間差0 〜 0.5(初期値 0.08)
列ごとの時間差0 〜 0.5(初期値 0)
行ごとに逆向きオン/オフ(初期値 オン)
イージングlinear・sine・quad・cubic・quint・expo・back・elastic

同じ分類のシーン(立体・擬似3D)