#/*********************************************************** # hilbert.rb -- Hilbert (ヒルベルト) 曲線 #***********************************************************/ require "plotter.rb" def rul(i) # right-up-left if (i == 0); return; end urd(i - 1); draw_rel( $h, 0) rul(i - 1); draw_rel( 0, $h) rul(i - 1); draw_rel(-$h, 0) dlu(i - 1) end def dlu(i) # down-left-up if (i == 0); return; end ldr(i - 1); draw_rel( 0, -$h) dlu(i - 1); draw_rel(-$h, 0) dlu(i - 1); draw_rel( 0, $h) rul(i - 1) end def ldr(i) # left-down-right if (i == 0); return; end dlu(i - 1); draw_rel(-$h, 0) ldr(i - 1); draw_rel( 0, -$h) ldr(i - 1); draw_rel( $h, 0) urd(i - 1) end def urd(i) # up-right-down if (i == 0); return; end rul(i - 1); draw_rel( 0, $h) urd(i - 1); draw_rel( $h, 0) urd(i - 1); draw_rel( 0, -$h) ldr(i - 1) end printf("位数 = "); order = gets.to_i gr_on $h = 1 for i in 2..order; $h = $h / (2 + $h).to_f; end move(0, 0); rul(order) gr_off exit 0