【HSP】二次元 ヒルベルト曲線 描画【モジュール】
【HSP】二次元 ヒルベルト曲線 描画【モジュール】
#module "HilbertDrawModule"
#deffunc HilbertDrawInit
Hilbert_x=0
Hilbert_y=0
Hilbert_delta=10
return
#deffunc ldr int n
if n>0 {
dlu n-1 : Hilbert_x-=Hilbert_delta : line Hilbert_x,Hilbert_y //←
ldr n-1 : Hilbert_y+=Hilbert_delta : line Hilbert_x,Hilbert_y //↓
ldr n-1 : Hilbert_x+=Hilbert_delta : line Hilbert_x,Hilbert_y //→
urd n-1
}
return
#deffunc urd int n
if n>0 {
rul n-1 : Hilbert_y-=Hilbert_delta : line Hilbert_x,Hilbert_y //↑
urd n-1 : Hilbert_x+=Hilbert_delta : line Hilbert_x,Hilbert_y //→
urd n-1 : Hilbert_y+=Hilbert_delta : line Hilbert_x,Hilbert_y //↓
ldr n-1
}
return
#deffunc rul int n
if n>0 {
urd n-1 : Hilbert_x+=Hilbert_delta : line Hilbert_x,Hilbert_y //→
rul n-1 : Hilbert_y-=Hilbert_delta : line Hilbert_x,Hilbert_y //↑
rul n-1 : Hilbert_x-=Hilbert_delta : line Hilbert_x,Hilbert_y //←
dlu n-1
}
return
#deffunc dlu int n
if n>0 {
ldr n-1 : Hilbert_y+=Hilbert_delta : line Hilbert_x,Hilbert_y //↓
dlu n-1 : Hilbert_x-=Hilbert_delta : line Hilbert_x,Hilbert_y //←
dlu n-1 : Hilbert_y-=Hilbert_delta : line Hilbert_x,Hilbert_y //↑
rul n-1
}
return
#deffunc HilbertDraw int _n,int _size
Hilbert_x=ginfo(22)+(_size<<_n)-_size
Hilbert_y=ginfo(23)
Hilbert_delta=_size
line Hilbert_x,Hilbert_y,Hilbert_x,Hilbert_y
ldr _n
return
#global
HilbertDrawInitpos 10,10
HilbertDraw 5,10
VC++用の元スクリプト↓
HilbertDraw p1,p2
p1=1~ : 何回繰り返すか
p2=1~ : ひとつのパーツの一辺の長さ (ピクセル)
おおお、これのことですかあん@@
きれいに描画されますね^^ どんどん表示されていくのも楽しいです。
3次元とは@@ なかなか奇妙な図になりそうですね……
ありがとうございます!!
こんな楽しいものを思いついたヒルベルトさんってすごいですよね!
いちおうWikipediaとかに図があるのですが、上手くやればきれい (?) です。
いけたら4次元まで行きたい… (え