中点変位法による電気画像


中点変位法による電気画像

中点変位アルゴリズムを再帰で実装して、雷のような画像を生成するアルゴリズム。
DIVは分割数。frameは描画コマ数。メモリ不足になるようなら、この数を減らしてみて下さい。
frameコマ描画しきったらそれらを高速に表示する。

DIV=60
frame=50
func r(l[a],h[a]){
    if(l=l[a],h=h[a],abs(l-h)>1){
        c[a]=c=(l+h)/2
        x[c]=(x[l]+x[h])/2+(y[l]-y[h])*(rand%10)/40
        y[c]=(y[l]+y[h])/2+(x[l]-x[h])*(rand%10)/40
        r(l,c[a++])
        r(c[a],h[a++])
    }
    --a
}
weight=5
y[0]=0
y[DIV]=240
x[0]=120
label 0
if(t==frame){
    drawimg(g[i++%t],0,0,0)
    sleep(50)
}else{
    gc()
    makeimg(g[t],240,240)
    trgt(g[t])
    lock()
    col(0)
    frect(0,0,240,240)
    for(a=0;a<DIV*3/4;a=a+abs(rand)%((DIV-a)/2)+(DIV-a)/4){
        x[DIV]=abs(rand)%240
        r(a,DIV)
        for(i=a;i<DIV;++i){
            color(96+32*(DIV-i)/DIV,0,120+40*(DIV-i)/DIV)
            line(x[i],y[i],x[i+1],y[i+1])
        }
    }
    unlock(1)
    trgt(off)
    drawimg(g[t++],0,0,0)
}
if(input(0)){end}
goto 0