【フラクタル解説】FNFE Project #5「ヘビゲームの最後」
どうもこんにちは。FNFE Projectへようこそ!
FNFEは「For New Fractal Enthusiasts(新たなフラクタル愛好家へ)」の略です。このコーナーでは「フラクタルに興味があるけど、何から始めたらいいかわからない。。。定義を見ても何が何だかさっぱりだ、、、」という人のために、フラクタルのことを分かりやすく解説していきます。
フラクタルについて一切知らない人でもフラクタルの面白さに気付けるように構成しているので、フラクタルが全く分からないという人でも是非読んでみてください!
今回は「空間充填曲線」について解説します。
₂L²
さて、今回の記事では前回学んだL-systemがかなり大事になってきます。なのでもしL-systemについて良く分からなければ、#4を読んでくるかこの節を読んでおくとよいと思います。(詳しく知りたい人は#4、サクっとでいい人はここで!)
・フラクタルの描画方法の一つ
・文字列を一定の規則に従い変換し、その文字列を図形に変換する
・計算を進めれば進めるほど正確な図が描ける
例としてはこんなものがあります。
初期値:A
変換規則:A⇒A+B、B⇒A-B +-はそのまま
図の描き方:AB→直進 +→左に90度回転 -→右に90度回転
結果:
➀A
②A+B
③A+B+A-B
④A+B+A-B+A+B-A-B
⑤A+B+A-B+A+B-A-B+A+B+A-B-A+B-A-B
(以下好きなところまで)
ここではあえてどんな図形が出来るかは載せません。もし知りたい人は#4を読んでみてください!
なぁになぁに
では本題。まずそもそも空間充填曲線とは何でしょうか?答えは文字通り「空間を埋め尽くすような曲線」なのですが、どんなものかイメージしにくい人が多いと思います。
・曲線なのに空間丸ごと使っちゃうの?
・曲線が空間を埋め尽くすってどんな状態?
・せいぜい一次元の存在でしかない曲線がそれより上次元の存在に追いつけるの?
というような疑問を持っている人が多いのではないでしょうか。

そのような疑問を解決するために、ここで空間充填曲線の理解につながる、あるゲームを紹介します。それは「ヘビゲーム」というものです。
ヘビゲームは、以下のようなルールのゲームです。
・自動的に進み続けるヘビを操作してエサを食べる
・ヘビは左右90度にのみ曲がることができる
・エサを食べるとヘビが長さが長くなる
・壁や自分自身にぶつかるとゲームオーバーとなる
よく分からない場合は「ヘビゲーム」とGoogleで検索してみてください。実際にプレイすることが出来ます。(機種に関係なく出来ます)
さてこのヘビゲーム、プレイしていくと徐々にヘビの長さが長くなっていき、最後の方は盤面のほぼ全体をヘビが埋め尽くすような状態になります。

これがまさに空間充填曲線の内容そのものです。
空間充填曲線とは、空間(次元は問わないので平面も含む)全体を通るような曲線の事で、その長さは無限大となります。
この曲線は長さは無限大ですが、範囲としては有限の空間内に収まります。
「無限の長さ、有限の面積、空間全体を埋め尽くす」ということですね。
うだうだ喋っててもしょうがないので例をあげましょう。
認知フィルター
先に断っておきますが、ここで紹介する空間充填曲線たちはあくまでも仮の姿です。
何故仮の姿で紹介するのかというと、本来の姿がだいたい全部これだからです。

本来の空間充填曲線とは一定の範囲内のすべての地点を通る曲線なので、どうしてもこのような形になってしまいます。そこで今回は描く途中過程を空間充填曲線として掲載しますが、これらはあくまで仮の姿であることを分かっておいてください。
初めて考案された空間充填曲線はペアノ曲線というものです。

これは以下のような構成となっています。
①正方形を縦三つ横三つ、合計九つに分割する
②それぞれの正方形の中点を図のように結ぶ

これで第一ステップ。ここからは第二ステップ。
③②の図形を正方形状に九つ並べる。この時、左列中段、中列上段、中列下段、右列中段の向きは左右で反転させる。

④それらが繋がるように並べる。

⑤出来た図形で③、④をひたすら繰り返す。
ここで、④の図形の黄色の部分に注目してほしいです。
これらの橋渡しのような線分の向きは、②の図形の線分と対応しています。

これより先に変換を続けていくときも同じような現象が見られます。つまり、ステップnのペアノ曲線の橋渡しの線分の向きは、一つ前のステップのペアノ曲線と対応している、ということです。
また、ステップを進める時に新たに追加される(前の図形のものではない)橋渡しの線分は必ず8個になり、その向きは②の図形の線分と対応します。
以上の変換を無限に繰り返したものがペアノ曲線です。たださっきも言ったとおりこれは仮の姿で、③④を無限に繰り返したものが真のペアノ曲線です。その形は普通に見たらただの正方形ですが、作りとしてはこんな風になってるよってのは知っておいてください。
ちなみにペアノ曲線はL-systemでも書けますが手順がダルすぎるので使われるのは稀です。
初期値:L
変換規則:L→LFRFL-F-RFLFR+F+LFRFL R→RFLFR+F+LFRFL-F-RFLFR F+-はそのまま
描画方法:F→直進 +→右に90度回転 -→左に90度回転 LR→何もしない
こんな蛭いたらマヂ無理
次は「ヒルベルト曲線」です。
ヒルベルト曲線はこんな形です。

この色は経路に沿ったグラデーションで変化しています。正方形のブロック状に色が大きく分かれていますね。
作られ方はこんな感じです。ここで、最初の形は「凵」のような形です。

図形を変形させた後は、このようにして橋渡しをします。ペアノ曲線の時と同じように橋渡しの形が最初の形と対応していますね。

また、ペアノ曲線の時と同じように、ステップnのヒルベルト曲線の橋渡しの線分は、一つ前のステップのヒルベルト曲線と対応しています。
ちなみにL-systemだとこうなります。
初期値:X
X→+YF-XFX-FY+
Y→-XF+YFY+FX-
描画方法:F→直進 +→右に90度回転 -→左に90度回転 XY→何もしない
空間充填曲線は、微分することが出来ません。また、自己交叉(自分自身と交わったり重なったりすること)がない曲線は正方形を埋め尽くすことは出来ません。
空間充填曲線の近似(仮の姿)で自己交叉が見られる場合は、本来の姿では無数の自己交叉が見られます。
ただし、重なるが横断はしないものもありますし、近似では自己交叉がないが本来の姿では自己交叉がある物もあります。
こんな蜂の巣マヂ無理
空間充填曲線は、正方形状に埋め尽くすだけではありません。今から紹介する図形は、六角形のような不思議な形をして充填します。

これは「ゴスパー曲線」です。今までとは違い、不規則な形で充填されていることが分かると思います。
これについてはL-systemで描いた方が簡単かもしれないです。
初期値:A
変換規則:A→A-B--B+A++AA+B- B→+A-BB--B-A++A+B
描画方法:AB→直進 +→左に60度曲がる -→右に60度曲がる


ちなみにこれの周の形をGosper Island(ゴスパー島)といい、タイリングが可能です。

ちなみに正三角形状に充填するものもあります。


これも橋渡しの線分の向きが最初の形(人文字の形)と対応しています。
休憩枠
ここからはいろいろ紹介していきます。

これは「ムーア曲線」です。ヒルベルト曲線と似ていますが、始点と終点が同じになるように作られているのがわかります。
初期値:LFL+F+LFL
変換規則:L→ -RF+LFL+FR- R→ +LF-RFR-FL+
描画方法:F→直進 +→右に90度回転 -→左に90度回転 LR→何もしない


これは「Z階数曲線」です。
左上から順番に辿って行くと、「左上→右上→左下→右下」という動きを繰り返していることが分かります。

Z階数曲線には面白い特性があり、
①x軸を二進数にしたものを偶数桁目に、
②y軸を二進数にしたものを奇数桁目に
③それぞれ配置して二進数の数を作り、
④それらを大きさ順に辿ると
⑤この図形が現れるという特性があります。
この特性はデータを圧縮する事やデータを効率的にまとめる事に活かされているといいます。

これは「H木(H-trees)」です。正直特に言うことがありません。

これは「シェルピンスキー曲線」です。閉曲線(内側と外側に分けられる図形)であることが大きな特徴です。一目だと内側と外側が分からないですね。
十和田湖行きたい
最後に、空間充填曲線とはちょっと違うのですが、ひとつの図形を紹介して今回は終わろうと思います。
それは「和田の湖」です。

この図形は、ある特殊な性質を持ちます。それは三つの図形が同じ境界を共有するということです。しかもそれらは互いに連結していて、共通する部分も持ちません。
この図形の作り方を説明します。
①正方形の形の領域を用意する。これを島に見立てる。

②0<x<2/3、1/3<y<2/3の範囲を掘って、青い湖とする。

③陸地の部分をなぞるようにして、赤い湖を掘る。端は空けておく。
この時、赤い湖の幅と陸の幅はともに1/9となっている。

④残された陸地の部分をなぞるようにして緑の湖を掘る。これも端を開ける。この時、赤い湖の幅と陸の幅はともに1/27となっている。

⑤残された陸地の部分をなぞるようにして青い湖の追加部分を掘る。このとき、幅が1/81の「運河」を掘って青い湖同士を繋げる。(掘る場所は最初の青い湖の先端とする)

⑥残された陸地の部分をなぞって赤い湖の追加部分を掘る。同様に、幅が1/273の「運河」を掘って赤い湖同士を繋げる。(掘る場所は最初の赤い湖の先端とする)
この時の様子が最初に見せた画像。
⑦残された陸地の部分をなぞって緑の湖の追加部分を掘る。同様に、幅が1/729の「運河」を掘って緑の湖同士を繋げる。(掘る場所は最初の緑の湖の先端とする)
⑧このようにしてどんどん湖を掘っていき、それを無限回繰り返すと和田の湖が完成する。
これで完成した青赤緑の三色の湖は、それぞれ同じ境界を持ちながら三つとも異なる図形です。二つの図形なら簡単ですが、三つの図形だとなかなか出来ません。しかも、それぞれの図形は互いに連結していて、重なる部分もないとなるとかなり作るのは難しいです。
この図形はのちのちの伏線となります。覚えておいてもいいでしょう。
まとめ
いかがでしたか?今回は「空間充填曲線」と「和田の湖」について紹介しました。
空間充填曲線は長さが無限の曲線で、空間全体を通るとわかりました。また、本来の姿を表そうとすると何も見えなくなってしまうので仮の姿で表しているというのは覚えておくべきです。
空間充填曲線を描画するときはL-systemが大活躍でしたね。色を付けると描画の過程が分かりやすくなりました。
和田の湖で登場した「それぞれ同じ境界を持ちながら三つとも異なる図形」という特性はそのうち紹介する「ニュートンフラクタル」という概念にもつながってくるので覚えておくとマウント取れます。
次回更新は7/21を予定しています。お楽しみに!
参考にしたサイト
※この記事で利用した画像はパブリックドメインのものを拾ってきたか自作です。
よくフラクタルの画像にライセンスをつけている人がいるんですが僕はそれ絶対ダメだと思うんですよ。フラクタルはあくまで図形で、何かの表や解説とかがついていなければ著作者の意図が入り込む余地はないので単純なフラクタルだけの画像はパブリックドメインで公開すべきだと思います。
なのでこのシリーズで使っている画像は全て自由に転載しまくっていいです。
