E01 C曲線

フラクタル曲線であるC曲線を作図してみます (このページ下部の添付ファイル参照)。C曲線に限ったことではありませんが、再帰が不可能なので再帰の段数を固定して描画することにします。

線分を作成するツール (Segs) の作成

まず、点のリストを与えるとそれらを結んだ線分のリストを返すコマンドを作成します。長い行は改行されてしまっているかも知れないので要注意です。

L = { (1,1), (2,3) }

L2 = Sequence[Segment[Element[L,i],Element[L,i+1]], i, 1, Length[L]-1]

ここで、出力オブジェクト L2、入力オブジェクト L でツール Segs を作成します。以下このようにツールを作成する操作を簡単に、

新規ツール: L2 = Segs[L]

と書くことにします。

C曲線の生成アルゴリズム (CPts1) の作成

2点のリストを与えると、C曲線の再帰を1ステップ進める1点を加えたリストを返すコマンドを作成します。

A = Element[L,1]

B = Element[L,2]

A' = Rotate[A,-pi/4,B]

A'' = Dilate[A',1/sqrt(2),B]

L3 = {A, A''}

新規ツール: L3 = CPts1[L]

C曲線の点を生成するツール (CPts) の作成

点のリストを与えると、C曲線の再帰を1ステップ進めたリストを返すコマンドを作成します。

L4 = Join[Sequence[~CPts1[Take[L,i,i+1]], i, 1, Length[L]-1]]

L5 = Join[L4, Last[L]]

新規ツール: L5 = CPts[L]

C曲線ツール (CCurve) の作成

最後に2点を与えるとC曲線を描画するコマンドを作成します。新規の点 C と D を作成し、

M = { C, D }

とリストを作り、M に CPts を適用します。得られたリストにさらに CPts を適用し、10回程度繰り返した後、Segs を適用すると C曲線の線分のリストが得られます。ここで、出力オブジェクトをC曲線の線分のリスト、入力オブジェクト C、D として、ツール CCurve を作成します。入力バーでコマンドを入力するならば次のようになります。

L6 = CPts[CPts[CPts[CPts[CPts[CPts[CPts[CPts[CPts[CPts[M]]]]]]]]]]

L7 = Segs[L6]

新規ツール: L7 = CCurve[C, D]

もし、コマンド Iteration の第1引数が関数だけでなくコマンドも受け付けるならば、10回程度反復している回数の部分を簡単に動的にできます。回数を動的にする別のうまい方法はないものでしょうか。

使ってみる

さて、ツール作成直後は、C曲線を含む多数のオブジェクトがありますが、Ctrl-A、Delete などを用いてすべて削除してもう1度C曲線を作図してみます。CCurve ツールを選択し、グラフィックスビューで2度クリックすると、その2点とC曲線の線分だけが作図されます。これは、ツール作成時途中の段階で作成されたオブジェクトは、定義したツールを使用するときには作成されないからです。

ツールの保存

ファイルメニューから .ggb ファイルを保存すると、ツールごと保存されます。また、ツールメニューからツールの管理を選び「名前を付けて保存」を実行すれば、ツールだけを .ggt ファイルに保存することもできます。