成果物
Peano曲線がL-Systemを使って描けることが分かったので、調べてみると非常に多くの空間充填曲線があることが分かったので実装してみました。今回は、線に色を付けることで、描画方法の特徴がわかるようにしました。単位正方形全体を含む曲線を空間充填曲線というようなのですが、今回は、隙間なく並んでいる曲線なども含めて紹介していきます。
空間充填曲線 - Wikipedia
Hilbert Curve
www.youtube.com
Blenderのレンダリングでも使われている、有名な空間充填曲線です。
Peano Curve
www.youtube.com
Hilbertが使われることが多いですが、Peano曲線も有名な空間充填曲線の一つです。
Triangle Fractal
www.youtube.com
L-Systemで空間を埋める三角形のフラクタルが書けるようです。私が昔作った三角形のフラクタルとは違いますが、こちらも綺麗です。
Dragon Curve
www.youtube.com
複雑な図形ができるですが、実はタイルのように並べることが可能です。
Quadratic Gosper
www.youtube.com
Hilbert曲線などと同じく、正方形になりますが、かなり複雑な形状をしています。
Hexagonal Gosper
www.youtube.com
先ほどの六角形バージョンです、回転するように成長するのが特徴です。
Levy Curve(おまけ)
www.youtube.com
おまけとして、スカスカのフラクタルも紹介しておきます。こちらのフラクタルも色々なところで使われています。
仕組み
L-Systemのルールを以下のように変更すると、空間充填曲線を描くことができます。線の長さは、それぞれ違った調整を行わなければなりません。どんな数で割ればいいのか、generate(x)というように例を示しておきますが、詳しくはソースコードを参照してください。
L-Systemのルールはこちらのサイトを参考にしています。
L-System manual
Hilbert Curve
axiom = X
X -> -YF+XFX+FY-
Y -> +XF-YFY-FX+
angle = 90
generate(1);
generate((1.*2+1)/1);
generate((3.*2+1)/3);
Peano Curve
axiom = X
X -> XFYFX+F+YFXFY-F-XFYFX
Y -> YFXFY-F-XFYFX+F+YFXFY
angle = 90
generate(2);
generate((2*3+2)/2.);
generate((8*3+2)/8.);
Triangle Fractal
axiom = F+F+F
F -> F-F+F
angle = 120
generate(1);
generate(1.7);(不明)
Dragon Curve
axiom = FX
X -> X+YF+
Y -> -FX-Y
angle = 90
generate(1);
generate(1.43);(不明)
Quadratic Gosper
axiom = -YF
X -> XFX-YF-YF+FX+FX-YF-YFFX+YF+FXFXYF-FX+YF+FXFX+YF-FXYF-YF-FX+FX+YFYF-
Y -> +FXFX-YF-YF+FX+FXYF+FX-YFYF-FX-YF+FXYFYF-FX-YFFX+FX+YF-YF-FX+FX+YFY
angle = 90
generate(5);
generate(5);
Hexagonal Gosper
axiom = XF
X -> X+YF++YF-FX--FXFX-YF+
Y -> -FX+YFYF++YF+FX--FX-Y
angle = 60
generate(2.8);
generate(2.8);(不明)
Levy Curve(おまけ)
axiom = F
F -> -F++F-
angle = 45
generate(1.43);
generate(1.43);(不明)
コード
L-System*という名前で追加しています。
github.com