【HSP】二次元 ヒルベルト曲線 描画【モジュール】

【HSP】二次元 ヒルベルト曲線 描画【モジュール】

こんなものだったら誰でも作れるような気もするけど…、最近興味持ったのでやってみました。
けど、時間なかったので、VC++用のプログラムを移植しました… (汗
作者様サンクス。
カンで移植したんですけどなんとか動きました (え
↓5次のヒルベルト曲線

#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
HilbertDrawInit

pos 10,10
HilbertDraw 5,10

VC++用の元スクリプト↓

posによる位置指定と、サイズ指定をできるようにしました。(サイズ指定は一つの小さい四角?の一辺の長さです)

HilbertDraw p1,p2
p1=1~ : 何回繰り返すか
p2=1~ : ひとつのパーツの一辺の長さ (ピクセル)

多少でもC言語の知識あると移植楽ですね (多少…orz
時間があれば三次元のもやりたいです。
ではまたいつか。
↓投票 (クリック) お願いします~


「【HSP】二次元 ヒルベルト曲線 描画【モジュール】」への2件のフィードバック

  1. おおお、これのことですかあん@@
    きれいに描画されますね^^ どんどん表示されていくのも楽しいです。
    3次元とは@@ なかなか奇妙な図になりそうですね……

  2. ありがとうございます!!
    こんな楽しいものを思いついたヒルベルトさんってすごいですよね!
    いちおうWikipediaとかに図があるのですが、上手くやればきれい (?) です。
    いけたら4次元まで行きたい… (え

コメントは受け付けていません。