loop-animation

線・波Wave Lines

横に引いた何本もの線を、正弦波や矩形波、ノイズで上下に揺らし、線ごとに少しずつ時間をずらして波を流します。

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

積み重なった線が正弦波・矩形波・階段波・ノイズで揺れる。山脈モードは手前が奥を隠す

このシーンで作る

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

どう計算しているか

  1. 画面の縦方向に「本数」ぶんの線を等間隔に並べます。各線は x を 5px 刻みで進めた折れ線で、点ごとに y を波の値だけずらします。
  2. 波の位相は arg = 「波の細かさ」·x − 「1ループの周期数」·t + 線番号·「線ごとの時間差」です。正弦波は sin(2π·arg) をそのまま使い、矩形波は tanh(4·sin) で山と谷を平らにし、階段波は sin の値を「階段の段数」で切り捨てて段差だけを滑らかにつなぎます。
  3. ノイズと山脈では、時間方向に閉じたノイズ(なめらかな乱数の場)を使います。山脈はノイズの絶対値を上向きに反転して尾根を作り、線の下を背景色で塗りつぶすので、手前の線が奥の線を隠します。
  4. 「中央を強調」をオンにすると、exp(−(x/w)²) というガウス関数(中央で 1、左右へ行くほど 0 に近づく釣鐘形の関数)を振幅に掛け、画面中央だけが大きく揺れます。
y = y₀ + amp·env(x)·sin(2π(freq·x − cycles·t + i·lag))

ループがつながる理由

時間の項は「1ループの周期数」(整数)× t なので、t が 0 から 1 に進むと位相がちょうど整数周期ずれ、sin などの値が元に戻ります。ノイズ系の波形は、ループの始めと終わりで同じ値になるように作ったノイズを使っています。

調整できるパラメータ

形

波形正弦波・矩形波・階段波・ノイズ・山脈
本数3 〜 90(初期値 28)
線幅0.5 〜 14(初期値 3)
縦の広がり0.2 〜 1.2(初期値 0.82)
中央を強調オン/オフ(初期値 オン)

動き

振幅0 〜 300(初期値 55)
波の細かさ0.25 〜 8(初期値 1.5)
1ループの周期数1 〜 4(初期値 1)
線ごとの時間差0 〜 1(初期値 0.06)
階段の段数2 〜 10(初期値 4)

同じ分類のシーン(線・波)