曼荼羅エクストリームの数学的原理
リサージュ曲線の周期性と、内トロコイドの回転運動を組み合わせることで、7つの数値パラメーターから複雑な幾何学模様を描画します。
この記事は、Webアプリ「曼荼羅エクストリーム」の計算式を説明するための記事です。元になっている考え方は、スピログラフ、内トロコイド、一般化スピログラフ、Excelアートの記事群です。
1. スピログラフと内トロコイド
スピログラフでは、大きな円の内側を小さな円が転がり、その小さな円に固定された点の軌跡を追います。小さな円の円周上の点を追えばハイポサイクロイド、円周から少し内側または外側にずらした点を追えば内トロコイドになります。
大きな円の半径を \(R\)、内側を転がる小さな円の半径を \(r\)、描画点までの距離を \(d\) とすると、標準的な内トロコイドは次の媒介変数表示で表せます。
第1項の \((R-r)\cos\theta, (R-r)\sin\theta\) は、小さな円の中心が大きな円の内側を回る運動です。第2項の三角関数は、小さな円そのものの回転によって、描画点が中心の周りを回る運動です。この2つを足し合わせることで、ペン先の座標が決まります。
2. リサージュ曲線へ拡張する考え方
通常の内トロコイドでは、小さな円の中心は単純な円運動をします。曼荼羅エクストリームでは、この中心運動をそのまま円にせず、横方向と縦方向に別々の周期係数を与えます。
横方向に係数 \(a\)、縦方向に係数 \(b\) を与えると、中心運動は次のようになります。
これは、円運動をリサージュ曲線のような周期運動へ置き換える操作です。\(a=b=1\) なら通常の円運動に近く、\(a\) と \(b\) を変えると、基礎となる中心軌道が花形、星形、格子状、ねじれた環状などに変化します。
3. アプリで使っている計算式
アプリでは、描画点までの距離 \(d\) を直接入力する代わりに、パラメーター \(D\) を使って次のように定義しています。
これにより、\(D\) を大きくすると描画点は小さな円の中心に近づき、\(D\) を小さくすると中心から遠ざかります。最終的にアプリが計算している座標は次の式です。
\(x_0, y_0\) は表示位置を画面中央付近へ移動するための定数です。模様そのものの形は、主に \(R, r, D, a, b\) と、点を取る順番を決める \(N, M\) で決まります。
4. 基礎曲線を触って理解する
ここでは、最終的な式をいきなり触る前に、部品となる曲線を個別に確認します。スライダーを動かすと図が再計算されるので、「どの値が何を変えているのか」を目で確認できます。
ハイポサイクロイド: 小円の円周上の点を追う
R, r は下の内トロコイドと最終形へ一方向に連動します。
小円の円周上の点を追うので、正確にはハイポサイクロイドです。薄い円が外側の定円、青い円が開始位置の内側の転がる円です。
内トロコイド: 描画点の距離 \(d\) を変える
R, r は最終形へ、d は \(D=r/d\) として最終形へ連動します。
\(d\) は小円の中心からペン先までの距離です。橙色の点が開始位置の描画点です。\(d=r\) のときはハイポサイクロイドになり、それ以外が内トロコイドです。
リサージュ曲線: 横と縦の周期を別々にする
周期係数 a, b は最終形の a, b へ一方向に連動します。
\(x=A\cos(a\theta)\), \(y=B\sin(b\theta+\delta)\) の形です。\(a\) と \(b\) は周期の比、\(\delta\) は位相差です。
点の結び方: \(M\) 分割した円を \(N\) 個飛ばしで結ぶ
N, M は最終形の N, M へ一方向に連動します。
円周を \(M\) 個に分割し、各点から \(N\) 個先の点へ線を引きます。\(N=1\) なら隣へ、\(N=2\) なら1つ飛ばしで結びます。
最終形: リサージュ化された内トロコイド
最終アプリと同じ7パラメーターです。\(R,r,D\) がトロコイドの骨格、\(a,b\) がリサージュ化、\(N,M\) が点の取り方と線の結び方を決めます。
5. 7つのパラメーターの意味
| \(R\) | 外側の基準円の半径です。\(r\) との比率によって、トロコイド部分の周期や閉じ方が大きく変わります。 |
|---|---|
| \(r\) | 内側を転がる円の半径です。\(R-r\) が中心運動の大きさになり、\((R-r)/r\) が内側の回転周期を決めます。 |
| \(D\) | 描画点の中心からの距離を調整する値です。実際の距離は \(r/D\) です。小さいほど大きく外へ振れ、大きいほど丸く控えめになります。 |
| \(N\) | 点を取る角度の進み方を決めます。単純に隣の点へ進むのではなく、\(M\) 分割された角度を \(N\) 個分ずつ進めるため、線の結び順が変化します。 |
| \(a\) | x方向のリサージュ係数です。中心軌道の横方向の周期を変えます。 |
| \(b\) | y方向のリサージュ係数です。\(a=b\) では対称性が強く、\(a=-b\) では回転方向の違いによる別の対称性が出やすくなります。 |
| \(M\) | 1周期を何分割して点を用意するかを表す解像度です。大きいほど滑らかになりますが、計算点数も増えます。 |
6. 点列を線で結ぶ描画方法
アプリでは、まず角度 \(\theta\) を離散的に作ります。具体的には、次の刻み幅で点を計算します。
つまり、\(M\) 個に分割した円周上を、\(N\) ステップずつ飛びながら点を取るイメージです。\(N\) と \(M\) の組み合わせによって、線が近くの点を順番に結ぶ場合もあれば、遠くの点を飛び飛びに結んで星形のような構造を作る場合もあります。
また、\(R\) と \(r\) が整数のときは、模様が閉じるまでに必要な回転数を考慮します。実装では、最小公倍数を使って次の回転数を求めています。
この回転数に応じて点数を増やし、途中で模様が切れず、閉じた図形として見えるようにしています。
7. アニメーションの原理
アニメーション機能では、開始状態と終了状態を保存し、その間のパラメーターを線形補間しています。進捗率を \(t\) として、\(0 \leq t \leq 1\) とおくと、任意の数値パラメーター \(p\) は次のように変化します。
色もRGBの各成分を同じ考え方で補間します。これにより、図形の形、背景色、線色、線幅が連続的に変化しているように見えます。
このアプリの面白さは、単一の曲線式だけでなく、点を取る順番、リサージュ係数、内トロコイドの回転比が同時に効いてくる点です。少しの数値変更でも、線の重なり方や対称性が大きく変化します。