お前のアイコンなんなの?その1 〜綺麗な螺旋たち〜

こんにちは. unvです.
突然ですが, 皆さんご自分のはてブのアイコンってなんですか?
ぼくがはてブのアカウントを開設したのは今から何年前かもわからないくらい昔なのですが, ふと自分のアイコンを見て思いました.
このアイコン, 何?
ぼくは心が綺麗な人間なので, このアイコンを久々に見たときには下ネタかと思ってしまいました....

この図形が何だったのか全く思い出せず, しばらく悶々とした日々を過ごしていたのですが,
つい先日奇跡的にこれが何だったのかを思い出すことができましたので, 忘れないうちにここに書き残していこうと思います.
ちなみにこの曲線, 「代数的ソリトン」(Algebraic soliton) という図形です.
ググっても全然出てきません, 驚き〜
書いているうちに記事がハチャメチャに長くなってしまったので (ありがち), 今回の記事で代数的ソリトンを説明することは諦めて, その準備として平面曲線論を触りだけ紹介します.
次回の記事でぼくのアイコンの曲線がどういったものなのかを解説しようと思います.
よろしくお願いします!

平面曲線論入門

高校では曲線の媒介変数表示なるものを習った.
それはユークリッド平面上の曲線 P を1つの実数 u を用いてベクトル \boldsymbol{P}(u) = (x(u), y(u)) の軌跡として表すことを言うのであった.
この記事では実数 u は「パラメータ」, 曲線 \boldsymbol{P}(u) は「パラメータ付き曲線」と呼ぶことにする.
パラメータ付き曲線のうち最もつまらないものは1点 (x(u)=y(u)=0など) であろう.
こういったつまらない (しかも性質も良くない) ものを除くため, 若干強い要請ではあるが, \boldsymbol{P}(u) = (x(u), y(u))u 微分がゼロでないものを考えることにする: \begin{align} \frac{\partial}{\partial u}\boldsymbol{P}(u) = \left(\frac{\partial x}{\partial u},~ \frac{\partial y}{\partial u}\right) \ne \boldsymbol{0} \end{align} (この条件を満たす曲線 \boldsymbol{P}(u) を「正則」(regular) であるという).

正則なパラメータ付き曲線のパラメータの取り方は無数にあるが, 軌跡の長さ (孤長) をパラメータにとるのが便利である.
曲線上 u=0 の点を基準とした孤長 s は \begin{align} s(u) = \int_0^u \sqrt{\left(\frac{\partial x}{\partial u'}\right)^2 + \left(\frac{\partial y}{\partial u'}\right)^2} du' \tag{1} \end{align} であるが, 正則性より s\ne0~(u\ne0) なので, sをパラメータにとることができる.
そうすると \begin{align} &\boldsymbol{P}(s) = \begin{pmatrix} \xi(s) \\ \eta(s) \end{pmatrix} \qquad(\xi(s(u))=x(u),~\eta(s(u))=y(u)~\mbox{として}), \tag{2} \\ &\begin{aligned} \left|\frac{\partial}{\partial s}\boldsymbol{P}(s)\right| &= \sqrt{\left(\frac{\partial \xi}{\partial s}\right)^2 + \left(\frac{\partial \eta}{\partial s}\right)^2} \\ &= \sqrt{\left(\frac{\partial \xi}{\partial u}\right)^2\left(\frac{\partial s}{\partial u}\right)^{-2} + \left(\frac{\partial \eta}{\partial u}\right)^2\left(\frac{\partial s}{\partial u}\right)^{-2}} \\ &= \left|\frac{\partial s}{\partial u}\right|^{-1} \sqrt{\left(\frac{\partial x}{\partial u}\right)^2 + \left(\frac{\partial y}{\partial u}\right)^2} = 1 \end{aligned} \tag{3} \end{align} とできる (つまり \boldsymbol{P}'(s) が単位ベクトルになる).

  • \boldsymbol{P}(s) の成分で定義される行列 \begin{align} F(s) = \begin{pmatrix} \partial \xi/\partial s & -\partial \eta/\partial s \\ \partial \eta/\partial s & \partial \xi/\partial s \end{pmatrix} \tag{4} \end{align} を \boldsymbol{P}(s) の「フレネ-セレ基底」(Frenet–Serret frame, Wikipedia フレネ・セレの公式) という.
  • \boldsymbol{P}(s) のフレネ-セレ基底については次の公式が成り立つ: \begin{align} \frac{\partial}{\partial s}F(s) = F(s) \begin{pmatrix} 0 & -\kappa(s) \\ \kappa(s) & 0 \end{pmatrix}. \tag{5} \end{align} この \kappa(s)\boldsymbol{P}(s) の「曲率」(Wikipedia 曲率) という.
証明: \boldsymbol{P}'(s) が単位ベクトルであることから, \partial \xi/\partial s = \cos{\theta(s)}, \partial \eta/\partial s = \sin{\theta(s)} と書けるような \theta(s) が存在する.
すると(5)式は \begin{align} \mbox{(左辺)} = \frac{\partial \theta}{\partial s} \begin{pmatrix} -\sin{\theta(s)} & -\cos{\theta(s)} \\ \cos{\theta(s)} & -\sin{\theta(s)} \end{pmatrix} \end{align} となり, これは \partial \theta/\partial s=\kappa(s) とすれば右辺に一致する. (証明終)

さまざまな曲率に対応するさまざまな曲線

ここまでの話は抽象的で, ぱっと見て式(5)が意味しているところも理解することが難しいかもしれない.
行列
\begin{pmatrix}
0 & -1 \\
1 & 0
\end{pmatrix} は90°の回転行列であることから, 式(5)が意味するところは, \boldsymbol{P}(s) の速度ベクトル \boldsymbol{P}(s) と直交する向きであり, その変化の度合いは \kappa であるということである.
ではこの曲率 \kappa (曲率の逆数は「曲率半径」である) はどういうものだろうか?
歴史上, さまざまな曲率を持つさまざまな曲線が考えられてきたので, そのうちのほんの一部を紹介する.

最も単純なケースは \kappa = a など曲率が一定の場合である.
この場合には \boldsymbol{P}(s) = \frac{1}{a}(\sin{as}, -\cos{as}) となり, これは円である (積分定数は全てゼロとして).
この円の半径が 1/a であることから, 曲率の逆数が曲率半径と呼ばれている所以がわかるだろうか?

オイラー螺旋

曲率が s についての多項式の場合はどうだろうか?
例えば \kappa(s) = as + b の場合, \theta(s) = as^2/2 + bs + c となる (a,b,c は全て定数).
\boldsymbol{P}(s) = (\xi(s), \eta(s)), \begin{align} \xi(s) = \int_0^s \cos{\left(\frac{1}{2}at^2 + bt + c\right)}dt, \quad \eta(s) = \int_0^s \sin{\left(\frac{1}{2}at^2 + bt + c\right)}dt \tag{6} \end{align} となる. 上式に登場する積分 \begin{align} C(s) = \int_0^s \cos{\frac{\pi}{2}t^2}dt, \quad S(s) = \int_0^s \sin{\frac{\pi}{2}t^2}dt \tag{7} \end{align} は初等的に表すことができないことが示されており, 「フレネル積分」(Fresnel integral, Wikipedia フレネル積分) と呼ばれている.
これらフレネル積分によって描かれる曲線は「オイラー螺旋」(Euler spiral) もしくは「コルニュ螺旋」(Cornu spiral), 「クロソイド」(clothoid) などと呼ばれている (Wikipedia クロソイド).
オイラー螺旋はPythonのscipyパッケージを使えば簡単に描くことができるので, 下にその結果を貼っておこう.

図1 オイラー螺旋. 図2 アルキメデス螺旋.
アルキメデス螺旋

先の例からもわかる通り, パラメータ付き曲線の各成分は, 三角関数の中に曲率を s について積分したものをさらに積分したものとなる.
このような積分は容易には実行できないことが普通だろう.
であるからして, これ以降の例では逆にパラメータ付き曲線の式から曲率を求めていくことにしよう.
極形式 r=\theta で表される曲線は, 「アルキメデス螺旋」(Archimedes spiral, Wikipedia Archimedean spiral (en)) と呼ばれている.
媒介変数表示では \boldsymbol{P}(u)=(u\cos{u}, u\sin{u}) である. 弧長は \begin{align} s(u) &= \int_0^u \sqrt{\left(\cos{u'}-u'\sin{u'}\right)^2 + \left(\sin{u'}+u'\cos{u'}\right)^2} du' \\ &= \int_0^u \sqrt{1+{u'}^2} du' = \frac{1}{2}\left(u\sqrt{1+u^2}+\ln{\left(u+\sqrt{1+u^2}\right)}\right). \tag{8} \end{align} 曲率は \begin{align} \frac{\partial \xi}{\partial s} &= \frac{\partial \xi}{\partial u} \frac{\partial u}{\partial s} = \frac{\cos{u}-u\sin{u}}{\sqrt{1+u^2}}, \\ \frac{\partial \eta}{\partial s} &= \frac{\partial \eta}{\partial u} \frac{\partial u}{\partial s} = \frac{\sin{u}+u\cos{u}}{\sqrt{1+u^2}} \end{align} がそれぞれ \cos{\vartheta}, \sin{\vartheta} となる \varthetas微分したものである.
式で表せば, \begin{align} \kappa(u) &= \frac{\partial}{\partial s}\arctan{\left(\frac{\sin{u}+u\cos{u}}{\cos{u}-u\sin{u}}\right)} \\ &= \frac{1}{\sqrt{1+u^2}} \left( \frac{\frac{\partial}{\partial u}\frac{\sin{u}+u\cos{u}}{\cos{u}-u\sin{u}}}{\left(\frac{\sin{u}+u\cos{u}}{\cos{u}-u\sin{u}}\right)^2+1} \right) = \frac{2+u^2}{\left(1+u^2\right)^{3/2}} \tag{9} \end{align} となる.
s の形が複雑なので, 曲率 \kappas の関数として陽に書くことはできないが,
図2に以上の式を用いて描いた曲線を載せておく.

その他の螺旋

ここまで書いておけば, 曲率が与えられたときに曲線の式を逆算したり,
曲線の式が与えられたときに曲率を求めたりできるだろう.
対数螺旋」(Bernoulliの螺旋とも, Wikipedia 対数螺旋) \begin{align} r &= e^{a\theta},\quad \boldsymbol{P}(u)=(e^{au}\cos{u},~e^{au}\sin{u}) \\ s(u) &= \sqrt{1+a^{-2}} \left(e^{au}-1\right) \tag{10} \\ \kappa(u) &= \frac{1}{\sqrt{1+a^2}} e^{-au} \quad\left(=\left(as + \sqrt{1+a^2}\right)^{-1} \right) \tag{11} \end{align} や「双曲線螺旋」(Wikipedia Hyperbolic spiral (en)) \begin{align} r &= a/\theta,\quad \boldsymbol{P}(u)=a(\cos{u}/u,~\sin{u}/u) \\ s(u) &= a \int_1^u \frac{\sqrt{1+{u'}^2}}{{u'}^2}du' \\ &= a\left[ \ln\left(u+\sqrt{1+u^2}\right) - \frac{\sqrt{1+u^2}}{u}\right] - a\left[\ln{(1+\sqrt{2})} - \sqrt{2}\right]\qquad(\ast) \tag{12} \\ \kappa(u) &= \frac{u^2}{a\sqrt{1+u^2}} \frac{\partial}{\partial u} \arctan{\frac{u\cos{u}-\sin{u}}{u\sin{u}+\cos{u}}} = \frac{u^4}{a\left(1+u^2\right)^{3/2}} \tag{13} \end{align} (\ast s(u)u\to0 で発散するので, 弧長を測る点を u=1 からとした)
はしばしば自然界に現れる螺旋の近似形として用いられる.
これらの概形を下に示す.

図3 対数螺旋. a=0.1として描画. 図4 双曲線螺旋.

この記事で挙げた例から, 曲率が分かれば曲線が復元できるということが分かっていただけたでしょうか?
今回は曲線の例として螺旋しか出しませんでしたが, 世には無限の曲線があります (カージオイドなどは知ってる人も多いでしょう).
それらについてもこの記事の手法と全く同様にして曲率を求めることができます.
また, 平面曲線に限らず空間曲線についても曲率を考えることができます.
(n次元空間では曲率に代わるパラメータは n-1 個必要で, 3次元空間内では曲率に加えて「捩率」(Wikipedia 捩率) が現れます.)
こういった展開を考えるのも面白いかと思います.
今日はこの辺りで終わりにします, 最後まで見てくれてありがと〜〜!!

参考文献

[1] 幾何学微分しないと 〜微分幾何学入門〜 (新装版), 中内伸光 (2019, 現代数学社).
旧版しか読んでいないが, 可愛い表紙に反して中身はしっかりしていた記憶.
[2]曲線と曲面の微分幾何, 小林昭七 (1995, 裳華房).