🧩

Lissajous曲線に関する観察記録

に公開

定義

本文の観察対象のLissajous曲線の定義は以下になる (abは正の整数,xyは座標):

x=\sin(a\cdot b+\phi), y=\sin(b\cdot t)

曲線の: \phiが変更していく時,視覚上に曲線が重なった時は1本として定義する(ちょっと雑...)。

曲線の向き: 視覚上,曲線の凹凸の少ない方向。例えば,下のこの曲線の向きは右として定義する。

\phiの単位: radian。

目標

任意のabを与えて,曲線が一本に見える時の\phiの値を見つけること。
また,向きも見つけること。

それによって,ab\phiの値を引数として,今の曲線の状態のわかる関数を作ること。

実験・観察

既存資料の勉強・AIに質問する

まずはWikipediaなどでLissajous曲線の基本的な性質を勉強,自分なりの実装をした。

次は,AIに直接質問する。残念ながら現時点のAI(ChatGPT/Claude/Gemini, 12/21/2025)では,ここのpromptに対して間違えた公式を生成する。

Let us do some math. Given a lissajous curve with parameter `a` (int, 0<a<=20),
`b` (int, 0<b<=20) and phi, please calculate the special phi value that makes:

* Two curve that covers each other, so they look like one curve.
* The facing (the curve pointing left/right or up/down) when they repeat.

既存のこのslideをも読んでみたが,Lissajous曲線の定義はもっと厳密なものにしたから,わからないところが多くてやめました。

直接曲線を描画・\phi値を記録

このsiteのおかけて,実験や観察の効率を上がった。

まず,a=n\cdot b(nは正の整数)の時,特別なものが出るから一旦討論から除外。

a b 重ねた時のphi
7 6 ~0.08, 0.25, ~0.42, ~0.58, 0.75, ~0.92, ...
7 5 0, 0.2, 0.4, ...
6 5 0.1, 0.3, 0.5 ...

どうやらbだけに反応するか...?

a(偶数) b 重ねた時のphi a(奇数) b 重ねた時のphi
12 5 0.1(右), 0.3, 0.5 ... 13 5 0(\), 0.2, 0.4, ...
8 5 0.1(左), 0.3, 0.5 ... 9 5 0(/), 0.2, 0.4, ...
6 5 0.1(右), 0.3, 0.5 ... 7 5 0(\), 0.2, 0.4, ...
4 5 0.1(左), 0.3, 0.5 ... 5 5 0(/), 0.2, 0.4, ...
2 5 0.1(右), 0.3(左), 0.5(右) ... 3 5 0(\), 0.2, 0.4, ...

aは奇数か偶数かに関連がありそう。あと,向きを周期的に変更している様子(abが変更しないときは,\phiごとに向きが反転,以下も同様)。5という数値なら規則性は推測しやすいから一旦ここまで整理しよう。

/**
 * When `a != n * b`.
 *
 * @param k A natural number (k >= 0).
 */
function generatePhi(a: number, b: number, k: number)
{
    const d_up   = isEven(a) ? (2 * k + 1) : (2 * k)
    const d_down = 2 * b
    
    return d_up / d_down
}
a(偶数) b 重ねた時のphi a(奇数) b 重ねた時のphi
12 7 ~0.07(右), ~0.21, ~0.36 ... 13 7 ~0.14(\), ~0.29, ~0.43, ...
8 7 ~0.07(左), ~0.21, ~0.36 ... 9 7 ~0.14(/), ~0.29, ~0.43, ...
4 7 ~0.07(右), ~0.21, ~0.36 ... 5 7 ~0.14(/), ~0.29, ~0.43, ...
2 7 ~0.07(左), ~0.21, ~0.36 ... 3 7 ~0.14(\), ~0.29, ~0.43, ...

上のcodeは検証済み。

向き・現在の状態に関する

a b(偶数) 重ねた時のphi a b(奇数) 重ねた時のphi
1 6 ~0.08(下), 0.25(上), ~0.42(下) 1 5 0(/), 0.2(\), 0.4(/)
2 6 0(\), ~0.33(/), ~0.67(\) 2 5 0.1(右), 0.3(左), 0.5(右)
3 6 0.25(下), 0.5(上), 0.75(下) 3 5 0(/), 0.2(\), 0.4(/)
4 6 ~0.17(左), 0.5(右), ~0.83(左) 4 5 0.1(左), 0.3(右), 0.4(左)

参考資料

https://zenn.dev/k_kuroguro/articles/b73e4e6e3d2c13

曲線の描画Online Website:
https://academo.org/demos/lissajous-curves/

Discussion