ここは僕の高校、いまは放課後。 僕とテトラちゃんはフラクタルの構造を表現する方法について考えていた。
僕「こんな感じでどうだろう。まずはコッホ曲線を表現してみる」
コッホ曲線を表現する
図形 $x$ を $60$ 度右上がりの向きに回転させた図形を、 $x^+$ と表現する。
図形 $x$ を $60$ 度右下がりの向きに回転させた図形を、 $x^-$ と表現する。
図形 $x$ の右隣に図形 $y$ を並べた図形を $x\,y$ と表現する。
レベル1のコッホ曲線を $K_1$ と表現する。これは水平に置いた線分のことである。
レベル $n+1$ のコッホ曲線を $K_{n+1}$ と表現する。これは、 $$ K_n\,K_n^+\,K_n^-\,K_n $$ に等しい。
※ただし、 $n$ は $1$ 以上の整数とする。
テトラ「$K_n\,K_n^+\,K_n^-\,K_n$ っていうのは……ははあ、なるほど! $K_n$ と $K_n^+$ と $K_n^-$ と $K_n$ を並べたということですね?」
僕「そうそう! うん、これはいいよ。まるで《漸化式》みたいにコッホ曲線が表現できる!」
コッホ曲線を表現する《漸化式》
$$ \left\{\begin{array}{llll} K_1 &= \REMTEXT{水平の線分} \\ K_{n+1} &= K_n\,K_n^+\,K_n^-\,K_n \end{array}\right. $$
テトラ「おもしろいです! ヒルベルト曲線も同じようにできるんでしょうか」
僕「うん、きっとできるよ。やってみよう!」
テトラ「あたしも考えます!」
フラクタルは《全体が部分と相似になっている図形》といえる。 だから、部分が全体とどういう関係になっているかを見抜けば、 ヒルベルト曲線の構造をよく理解できるんじゃないかと思う。
僕「まず、こうだよね。さっきのコッホ曲線(第85回参照)では、 $60$ 度の回転がポイントだったけど、ヒルベルト曲線では $90$ 度の回転が出てくる」
テトラ「はい、そうですね。右にコトン、左にコトンの二種類あります」
僕「だから、《レベル $n$ のヒルベルト曲線》を $H_n$ で表すとして、 それを《$90$ 度右回転》したものを $H_n^-$ と書いて、 《$90$ 度左回転》したものを $H_n^+$ と書くことにしよう」
テトラ「三つの《つなぎ目》もありました」
僕「そうだね。垂直方向のつなぎ目を $v$ として、水平方向のつなぎ目を $h$ とすればいいかなあ」
テトラ「なるほどです。 $v$ はvertical、 $h$ はhorizontalですねっ!」
僕「そうそう。あとはそれを順番に並べて……と」
ヒルベルト曲線を表現する
図形 $x$ を $90$ 度左に回転した図形を、 $x^+$ と表現する。
図形 $x$ を $90$ 度右に回転した図形を、 $x^-$ と表現する。
図形 $x$ に図形 $y$ をつなげた図形を $x\,y$ と表現する。
短い垂直の線分を $v$ で、短い水平の線分を $h$ と表現する。
レベル1のヒルベルト曲線を $H_1$ と表現する。これは「コの字」型になった図形である(開口部を下に向ける)。
レベル $n+1$ のヒルベルト曲線を $H_{n+1}$ と表現する。これは、 $$ H_n^-\,v\,H_n\,h\,H_n\,v\,H_n^+ $$ に等しい。
※ただし、 $n$ は $1$ 以上の整数とする。
テトラ「右回転($H_n^-$)、垂直つなぎ目($v$)、そのまま($H_n$)、水平つなぎ目($h$)、 そのまま($H_n$)、垂直つなぎ目($v$)、左回転($H_n^+$)……確かにそうなりますね」
ヒルベルト曲線の構造
僕「まあ、でも、こうやって書いてみると《あたりまえ》に見えてくるね」
テトラ「先輩! でも《あたりまえから始めるのはいいこと》なんですよね?」
僕「そうだね!」
《あたりまえから始めるのはいいこと》というのは、僕がいつもテトラちゃんに言っているセリフだ。 後輩から逆に諭されてしまった……
テトラ「では、《漸化式》の形にまとめますっ!」
ヒルベルト曲線を表現する《漸化式》
$$ \left\{\begin{array}{llll} H_1 &= \REMTEXT{コの字の図形(開口部は下向き)} \\ H_{n+1} &= H_n^-\,v\,H_n\,h\,H_n\,v\,H_n^+ \end{array}\right. $$
僕「うんうん」
テトラ「あれ? 先輩の書き方ですと、 $h$ は $v^+$ と表現してもいいですよね?」
僕「おっと、そうだね!」
図書室にミルカさんがやってきた。 さっそく彼女は僕たちのノートをのぞき込む。
ミルカ「フラクタル?」
テトラ「そうなんです! コッホ曲線とヒルベルト曲線の構造を書こうとしているんです」
ミルカ「この記法は、君が?」
ミルカさんはメタルフレームの眼鏡に軽く触れて言った。
僕「うん、そうだよ。最初は図を描いていたんだけど、 何だか数式っぽく書けるんじゃないかと思って。 レベルを $n$ で表せば、ちょうど《漸化式》もどきに書けたんだ」
ミルカ「L-システムに似ている」
僕「エルシステム?」
ミルカ「Lindenmayer System, 略してL-システムという。 文字列を書き換えることでフラクタルのような再帰的構造を記述する方法」
僕「へえ」
テトラ「再帰的構造というのは何でしょう」
ミルカ「ある構造が、その構造自身によって定義される構造の総称。 フラクタルは、再帰的構造を持った図形といえる」
テトラ「では、フラクタル=再帰的構造ということでしょうか」
ミルカ「いや、そうではない。再帰的構造は図形にかぎらないから」
僕「そのL-システムというのはどういうもの?」
ミルカ「たとえばコッホ曲線なら、こんなふうに表現できる」
コッホ曲線をL-システムで表現する
開始文字列: F
変換ルール: F → F+F−−F+F
Fは《線分を描いて進む》を意味する。
+は《$60$ 度左を向く》を意味する。
−は《$60$ 度右を向く》を意味する。
僕「開始文字列と変換ルール……」
ミルカ「開始文字列から始める。最初はFだ。ここでは《線分を描いて進む》に相当する」
僕「なるほど。これはレベル1のコッホ曲線だね」
Fが描く曲線
ミルカ「次がポイント。文字列を変換ルールの通りに置き換える。 変換ルールがF → F+F−−F+Fだから、FをF+F−−F+Fで置き換える。 結局F+F−−F+Fになるだけだが」
僕「そうか、F+F−−F+Fに従って《図形を描く》のかな?」
ミルカ「その通り」
F+F−−F+Fが描く曲線
テトラ「これって、先輩の $K_2 = K_1\,K_1^+\,K_1^-\,K_1$ と同じではないんですか?」
僕「少し違うよ、テトラちゃん。僕の書き方だと図形を用意して並べただけだけど、 L-システムだと全部図形を《描いて》いくんだ」
テトラ「……よくわかりません」
ミルカ「棒を持って砂浜に図形を描くのに似ている」
テトラ「?」
ミルカ「テトラは棒を持って砂浜に立っている。手には F+F−−F+F と書かれた紙を持っている。 テトラはそれを読みながら砂浜を歩く。棒を砂の上に引きずりながら」
テトラ「ははあ……すると砂浜に図形が描かれますね」
ミルカ「『F』を読んだら前に進む。すると線分が描かれる。『+』を読んだら左 $60$ 度に身体の向きを変える。 『−』を読んだら……」
テトラ「右 $60$ 度に身体の向きを変える?」
ミルカ「そう。そして、『F+F−−F+F』を読み終えたところで砂浜を振り返ると、そこには……」
テトラ「レベル2のコッホ曲線が描かれている!」
ミルカ「ということになる」
僕「なるほどねえ。レベル3も同じようにできるんだね。 『F+F−−F+F』の『F』を、全部『F+F−−F+F』で置き換えればいいのか!」
テトラ「そ、それってものすごく長くなりませんか?」
ミルカ「こうなる」
コッホ曲線をL-システムで表現する
レベル1: F
レベル2: F+F−−F+F
レベル3: F+F−−F+F+F+F−−F+F−−F+F−−F+F+F+F−−F+F
F+F−−F+F+F+F−−F+F−−F+F−−F+F+F+F−−F+Fが描く曲線
テトラ「うわわ……」
僕「レベル2のところをカッコでくくるとよくわかるね」
レベル3: (F+F−−F+F)+(F+F−−F+F)−−(F+F−−F+F)+(F+F−−F+F)
テトラ「ははあ……『F+F−−F+F』の『F』を『F+F−−F+F』で置き換えている……」
レベル2: F+F−−F+F
↓Fにカッコを付ける
レベル2: (F)+(F)−−(F)+(F)
↓カッコの中身をF+F−−F+Fで置き換える
レベル3: (F+F−−F+F)+(F+F−−F+F)−−(F+F−−F+F)+(F+F−−F+F)
↓カッコをはずす
レベル3: F+F−−F+F+F+F−−F+F−−F+F−−F+F+F+F−−F+F
僕「《全体が部分と相似になっている図形》というフラクタルがうまく表現できるわけか」
ミルカ「このような変換ルールの反復は、 君の《漸化式》でいえば、 $K_3$ を $K_1$ だけで表現するのに似ている」
コッホ曲線を僕の漸化式で表現する
$K_1 = K_1$
$K_2 = K_1\,K_1^+\,K_1^-\,K_1$
$K_3 = (K_1\,K_1^+\,K_1^-\,K_1)\,(K_1\,K_1^+\,K_1^-\,K_1)^+\,(K_1\,K_1^+\,K_1^-\,K_1)^-\,(K_1\,K_1^+\,K_1^-\,K_1)$
僕「なるほど。僕の書き方だと、図形をまとめてそれを回転するためにカッコが必要になるなあ」
テトラ「ミルカさん! ヒルベルト曲線もL-システムで表現できるんでしょうか?」
ミルカ「もちろん」
無料で「試し読み」できるのはここまでです。 この続きをお読みになるには「読み放題プラン」へのご参加が必要です。
ひと月500円で「読み放題プラン」へご参加いただきますと、 440本すべての記事が読み放題になりますので、 ぜひ、ご参加ください。
参加済みの方/すぐに参加したい方はこちら
結城浩のメンバーシップで参加 結城浩のpixivFANBOXで参加(2014年8月15日)