loop-animation

スピログラフSpirograph

大きな歯車の内側や外側を小さな歯車が転がり、穴に差したペンが花模様を描いていくループアニメーションです。

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

歯車の中を歯車が転がり、穴に差したペンが花模様を描く。歯数の比で1周の形が決まる

このシーンで作る

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

どう計算しているか

  1. 「外側の歯数」と「転がる歯数」から2つの円の半径を決めます。小さい円の中心は大きい円に沿って回り、同時に転がり分だけ自転します。
  2. ペン先の位置は、公転の cos・sin と、半径比で決まる速さの自転の cos・sin を足して求めます(内側を転がるときはハイポトロコイド、外側ならエピトロコイドという曲線になります)。「ペンの位置」は小さい円の中心からペン先までの距離です。
  3. 模様が閉じるまでに必要な公転の回数は、転がる歯数を2つの歯数の最大公約数で割った値です。1ループでこの回数だけ公転させます。
  4. 現在位置から「描線の長さ」ぶんさかのぼった部分を濃く描き、「完成形をうっすら」で1周分の全体像を薄く重ねます。
x = (R−r)cosθ + d·cos((R−r)θ/r),  θ = 2π·laps·t

ループがつながる理由

歯数がどちらも整数なので、決まった回数公転するとペンは必ず出発点に戻り、曲線が閉じます。1ループの角度をちょうどこの周期に合わせているため、最後のコマと最初のコマが一致します。

調整できるパラメータ

形

種類内側を転がる・外側を転がる
外側の歯数20 〜 150(初期値 96)
転がる歯数8 〜 90(初期値 36)
ペンの位置0.1 〜 1.2(初期値 0.75)
ペンの本数1 〜 5(初期値 1)
大きさ0.3 〜 1.1(初期値 0.85)
歯車を描くオン/オフ(初期値 オン)
完成形をうっすらオン/オフ(初期値 オン)
描線の長さ0 〜 1(初期値 0.6)
線幅0.5 〜 8(初期値 2)

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