loop-animation

群れFlock

小さな矢じりの群れが整数周波数の軌道に沿って泳ぎ、集まったり散ったりを繰り返す魚群のようなループです。

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

小さな三角形の群れが、整数周波数の軌道に沿って魚群のように集まっては散る

このシーンで作る

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

どう計算しているか

  1. 「群れの数」だけ群れを作り、それぞれの中心を x = sin(2π(fx·s + 位相))、y = sin(2π(fy·s + 位相)) のリサージュ曲線で動かします。周波数 fx, fy と振幅は「シード」から作る乱数で決まり、全体の大きさは「軌道の大きさ」で決まります。
  2. 各個体は中心からのずれ (ox, oy) を持ちます。ずれの大きさは「群れの広がり」に、1 ループに 2 回膨らんで縮む sin の係数を掛けたもので、その振れ幅を「集散の強さ」で決めます。
  3. さらに各個体は半径の小さな円を整数周波数で回り、群れの中でうごめくような細かい動きを加えます。
  4. 各個体は時刻を少しだけ遅らせて(最大「群れの縦の長さ」)軌道をたどるため、群れが進行方向に伸びます。向きは少し先の位置との差から atan2 で求め、図形をその方向へ回転させます。
c(s) = (aₓ·sin 2π(fₓs + pₓ), a_y·sin 2π(f_y s + p_y)),  s = t − lag

ループがつながる理由

群れの軌道、集散、個体の小さな円運動のすべてが整数周波数の sin・cos でできているため、t が 1 進むと全員が元の位置と向きに戻ります。個体ごとの時間の遅れも、周期関数の中での一定のずれにすぎません。

調整できるパラメータ

形

群れの数1 〜 6(初期値 3)
1群れの数5 〜 120(初期値 40)
個体の大きさ3 〜 30(初期値 10)
形矢じり・点・線
シード0 〜 999(初期値 21)

動き

軌道の大きさ100 〜 480(初期値 340)
群れの広がり5 〜 200(初期値 60)
集散の強さ0 〜 1(初期値 0.6)
群れの縦の長さ0 〜 0.3(初期値 0.08)

同じ分類のシーン(点・軌道)