loop-animation

多面体ワイヤーWire Solids

正多面体の頂点と辺を3次元で回転させて画面に投影し、ワイヤーフレームとして描くアニメーションです。

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

正多面体のワイヤーフレームが整数回転で回る。並べて時間差をつけると群れのように揃っては崩れる

このシーンで作る

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

どう計算しているか

  1. 「立体」で選んだ多面体の頂点座標を、黄金比などを使った決まった値から作り、原点からの距離が1になるようにそろえます。辺は、頂点どうしの距離がいちばん短い組み合わせとして自動で求めます。
  2. 各頂点を、まず横軸まわりに少し傾け、次に「回転軸」で選んだ軸のまわりに角度 θ だけ回します。任意の軸まわりの回転には、軸ベクトルと cos·sin を組み合わせた回転の公式を使います。
  3. 回したあとの奥行き z を使って、1 / (1 + 遠近感·z·0.6) 倍に縮めて画面に投影します。奥にあるほど小さく見えます。
  4. 辺は奥のものから順に描き、奥にあるほど薄く細くします。「頂点に点」がオンなら頂点にも丸を置き、同じく奥行きで薄くします。
  5. 「並べる数(1辺)」で格子状に並べた場合は、「位相のずれ方」と「ずれ量」で立体ごとに時刻をずらします。
θ = 2π·turns·ease(fract(t − off)),  k = 1 / (1 + persp·z·0.6)

ループがつながる理由

回転角は 2π ×「1ループの回転数」× ease(u) で、回転数は整数です。u が 1 になると立体はちょうど整数回転して元の向きに戻ります。時刻のずれは fract で折り返すので、並べた場合もつながります。

調整できるパラメータ

形

立体立方体・正四面体・正八面体・正二十面体・正十二面体・立方八面体
並べる数(1辺)1 〜 8(初期値 1)
大きさ0.2 〜 1.2(初期値 0.75)
遠近感0 〜 1(初期値 0.4)
線幅0.5 〜 12(初期値 3)
頂点に点オン/オフ(初期値 オン)

動き

回転軸少し傾いた縦軸・縦軸・横軸・対角軸
1ループの回転数1 〜 3(初期値 1)
位相のずれ方同時・放射・角度・渦巻き・斜め・横・縦・市松・ランダム
ずれ量0 〜 4(初期値 0.3)
イージングlinear・sine・quad・cubic・quint・expo・back・elastic

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