Hilbert Curve
to msgn :num
output * -1 :num
end
to revrseAngle
make "stat.angle msgn :stat.angle
end
to hilbert :d
if :d = 0 [stop]
make "d (- :d 1)
revrseAngle
right :stat.angle
hilbert :d
revrseAngle
forward :atom
right :stat.angle
hilbert :d
forward :atom
hilbert :d
right :stat.angle
forward :atom
revrseAngle
hilbert :d
right :stat.angle
revrseAngle
end
to hilbertCurve :depth [:plane 300] 1
(local
"stat.angle
"atom
)
make "stat.angle 90
make "atom :plane
penup
setxy sentence / :plane 2 msgn / :plane 2
pendown
repeat 4 [forward :plane left 90]
repeat :depth [make "atom (/ :atom 2)]
penup
forward / :atom 2
left 90
forward / :atom 2
right 90
pendown
hilbert :depth
end
![](../img/hilbertCurve.gif)
hilbertCurve 6
あまりにも有名なヒルベルト曲線です。
ドイツの数学者が発見したので、その人の名前が付いています。
コの字の形を、基本図形とした自己相似図形です。
このタイプの図形は、空間充填曲線とも呼ばれています。
再帰レベルが深くなるほど空間(この場合は plane
で指定された平面)を、線で埋め尽くしていきます。
プログラムの中心となる所は、手続き hibert です。
コの字の反転パターンを、revrseAngle
手続きを使い自己定義させています。
右にしか方向を変えていませんが、マイナス90度右(つまり左に90度)に方向転換をしているのです。
Sierpinski
Curve
to seconds.since.midnight
local "t
make "t time
output + + * first :t 3600 (* item 2 :t 60) last :t
end
to Seg :d
if :d < 1 [
forward :atom
left 45
forward :batom
left 45
forward :atom
stop
]
make "d (- :d 1)
Seg :d
right 90
forward :atom
right 90
Seg :d
left 45
forward :batom
left 45
Seg :d
right 90
forward :atom
right 90
Seg :d
end
to sierpinskiCurve :depth [:plane 300] 1
(local
"atom "batom "tatom
"stime "etime
)
; Setup
make "atom (/ :plane 4)
repeat :depth [make "atom (/ :atom 2)]
make "depth (- :depth 1)
make "tatom (* * :atom cos 45 2)
make "batom (* :atom 2)
make "atom :tatom
penup
setxy sentence msgn / :plane 2 (/ :plane 2)
setheading 0
pendown
repeat 4 [right 90 forward :plane]
penup
right 135
forward * :atom 1.5
left 90
forward / :atom 2
right 90
pendown
; Main
make "stime seconds.since.midnight
repeat 4 [
Seg :depth
right 90
forward :atom
right 90
]
make "etime seconds.since.midnight
print sentence "|Sec| (- :etime :stime)
end
![](../img/sierpinskiCurve.gif)
sierpinskiCurve 5
Sec 14
iMac Rev.Dで、描画に掛かった時間が14秒。|-(
これも奇麗な再帰パターンのシェルピンスキ曲線です。
ヒルベルトと同じく空間充填曲線の仲間です。
ヒルベルト曲線は、図形が閉じていない開曲線でしたが、このシェルピンスキ曲線は、閉じている閉曲線です。
図形を、4分の1づつ描きながら再帰を繰り返す様にプログラムされています。
![](../img/bret.gif)
|