再帰型プログラミングの試み


1. Example of Peano curve

 図1左のように三角形を分割し4個の領域に分ける.区分された三角形を更に4個に分割を繰り返す。得られた各小三角形の重心は図1中に示されている。これらの点16個を次々につなぐと図1右のような曲線が得られる。これがペアノ曲線(注1)の一例である。

以下のようなFull BASIC(注2) による再帰型SUBプログラムPeano(n)(注3)によって容易にペアノ曲線が得られる。図2は正方形の対角線で得られる2つの三角形のそれぞれを5回分割を繰り返して得られたものである。この閉じた曲線をシェルピンスキー曲線という。閉じた曲線を示すために線の内部が塗りつぶされている。

OPTION ANGLE DEGREES
PICTURE Peano(n)
IF n=1 THEN
PLOT LINES: 1.0, 0.3333 ;
ELSE
DRAW Peano(n-1) WITH SCALE(1/2)
DRAW Peano(n-1) WITH SCALE(1/2)*ROTATE(90)*SHIFT(1,0)
DRAW Peano(n-1) WITH SCALE(1/2)*ROTATE(-90)*SHIFT(1,1)
DRAW Peano(n-1) WITH SCALE(1/2)*SHIFT(1,0)
END IF
END PICTURE
SET WINDOW -0.1,1.6,-0.1,1.6
SET BEAM MODE "IMMORTAL"
LET s2=SQR(2)
DRAW Peano(5) WITH ROTATE(45)
DRAW Peano(5) WITH ROTATE(-135)*SHIFT(s2,s2)
PLOT LINES : 0.0295,0.059
PAINT 0.032,0.059
END

注1 Giuseppe Peano\ (1858〜1932), イタリアの数学者,記号論理学の開拓者.1890年に彼によって提案された。
注2 http://hp.vector.co.jp/authors/VA008683/
注3 上のHome Pageにあるインストーラ版を展開すると,各種プログラムが「SAMPLE」等から得ることができる。

2. Hilbert curve

 ヒルベルト曲線は次のような考察によって,ペアノ曲線と同様に再帰型SUBプログラムを実行することによって得られる。
 図4のように正方形の領域を4分割し、各小正方形の中心を印○から始め印Xまで線を引きコの字型を描く。中心には対称性を明示するためにアルファベットの「R」が示されている。更に分割を進めると図5が得られる。各小正方形の中心には軌跡と同じ対称関係にある「R」が示されている。


図5は6段階分割を進めて描かれたものである。それを描くためのFull BASIC プログラムは以下のごとくである。再帰型SUBプログラムには上に示された「R」の対称関係が考慮されている.

OPTION ANGLE DEGREES
PICTURE Hilbert(n)
SET LINE COLOR 4
SET LINE WIDTH 3
IF n=1 THEN
PLOT LINES: 0,0 ;
ELSE
DRAW Hilbert(n-1) WITH SCALE(1/2,-1/2)*ROTATE(90)*SHIFT(-1,-1)
DRAW Hilbert(n-1) WITH SCALE(1/2)*SHIFT(-1,1)
DRAW Hilbert(n-1) WITH SCALE(1/2)*SHIFT(1,1)
DRAW Hilbert(n-1) WITH SCALE(1/2,-1/2)*ROTATE(-90)*SHIFT(1,-1)
END IF
END PICTURE
SET WINDOW -2.1,2.1,-2.1,2.1
SET BEAM MODE "IMMORTAL"
DRAW Hilbert(6)
END