2007年6月3日日曜日

再帰による折れ線描画

再帰を利用してランダムな折れ線を描くスクリプト。
コメントを外せば、磁石に吸いつく砂鉄のような模様ができます。

関連:


#module
#const RADIUS 10
#deffunc draw int sx, int sy, int ex, int ey, int count, local rx, local ry
    if count > 0 {
        theta = 3.14 * rnd(100) / 50
;       theta = atan(mousey - sy, mousex - sx) + 0.01 * (15 - rnd(30))
        rx = int(cos(theta) * RADIUS)
        ry = int(sin(theta) * RADIUS)
        draw sx, sy, (sx + ex)/2 + rx, (sy + ey)/2 + ry, count - 1
        draw (sx + ex)/2 + rx, (sy + ey)/2 + ry, ex, ey, count - 1
    } else {
        hsvcolor 191 * sx / ginfo_winx255255
        line sx, sy, ex, ey
    }
    return
#global

    randomize
*main
    redraw 0
    color : boxf
    repeat 61
        draw ginfo_winxcnt*700cnt*705
        // ↑の5を1以上の整数に変えると線が変わる。重いけど10とか面白い。
    loop
    redraw 1
    wait 4
    goto *main

0 件のコメント: