トーラスTorus
ドーナツ形(トーラス)の表面に並べた点や線を3次元で回転させて投影し、表面の模様を流すアニメーションです。
どう計算しているか
- トーラスの表面の点は、輪の周りの角度 u と管の周りの角度 v を使って、((1 + r·cos v)·cos u, r·sin v, (1 + r·cos v)·sin u) と表せます。r は「太さ」です。
- 「大きい方の分割」と「小さい方の分割」の数だけ u と v を等間隔に取り、点を置きます。「輪」では管を一周する円を、「螺旋」では輪を一周するあいだに管を3周する線を描きます。
- 各点を縦軸まわりに回し、さらに「傾き」の角度だけ横軸まわりに倒してから、遠近感をつけて投影します。奥にある点や線ほど小さく細くし、背景色に近づけます。
- 「表面の流れ」は、u(螺旋では v)の角度に時間に比例するずれを足して、模様を表面に沿って動かします。
P(u, v) = ((1 + r·cos v)·cos u, r·sin v, (1 + r·cos v)·sin u)ループがつながる理由
回転は 2π ×「1ループの回転数」× t で、回転数は整数なので元の向きに戻ります。表面の流れは、1ループで整数個ぶんの区画だけ進むように調整しています。分割数がパレットの色数で割り切れるときは色数ぶん、そうでないときは一周ぶん進めるので、形も色の並びも最初と一致します。
調整できるパラメータ
形
| 描き方 | 点・輪・螺旋 |
|---|---|
| 大きい方の分割 | 8 〜 80(初期値 40) |
| 小さい方の分割 | 4 〜 40(初期値 16) |
| 太さ | 0.15 〜 0.7(初期値 0.4) |
| 大きさ | 0.3 〜 1.2(初期値 0.8) |
| 点の大きさ・線幅 | 0.5 〜 12(初期値 4) |
| 傾き | 0 〜 1.5(初期値 0.9) |
動き
| 1ループの回転数 | 0 〜 3(初期値 1) |
|---|---|
| 表面の流れ | -4 〜 4(初期値 1) |
| 遠近感 | 0 〜 1(初期値 0.35) |
同じ分類のシーン(立体・擬似3D)
- 擬似3D・階段Iso Columns斜め上から見た四角い柱が格子状に並び、中心から外へ伝わる波に合わせて高さが上下するアニメーションです。
- 擬似3D・六角形Cube Turn六角形に見える立方体を敷き詰め、それぞれを120°ずつ回して面の色を入れ替え、凹凸が反転して見える錯視です。
- 階段Endless Stairs平行に並んだ階段をボールが一段ずつ跳ねて降り、カメラも同じ速さで追いかけるので、終わりなく続いて見える階段です。
- 転がる多角形Rolling Polygons正多角形が地面に接した角を支点に一辺ぶんずつ倒れて転がり、行ごとに時間差をつけて進んでいくアニメーションです。
- 多面体ワイヤーWire Solids正多面体の頂点と辺を3次元で回転させて画面に投影し、ワイヤーフレームとして描くアニメーションです。
- 積み木の塔Block Towerアイソメトリックで描いた積み木の塔に上から1つずつ積み木が落ちて跳ね、塔全体が1段沈んで元の高さに戻るアニメーションです。
- ルービックキューブ風Cube Puzzle3×3の立体パズルの面をランダムに90°ずつ回して崩し、同じ手順を逆にたどって揃った状態に戻るアニメーションです。
- 球面の点Dot Sphere球面に均等に並べた点を回転させ、緯度に沿った波で表面を脈打たせながら色の縞を流すアニメーションです。
- レイマーチング立体GLRaymarched Forms距離関数で定義した3D立体をレイマーチングで描き、球が溶け合ったり、箱がねじれたり、トーラスが回ったりする様子に陰影を付けるアニメーションです。