SPALM more用捻り円描画関数


SPALM more用捻り円描画関数

SPALM moreでsqrtとか小数が使えるということで、白と黒の捻ったような円を描画する関数を作ってみた。
使い方は下に示されている通りである。処理は激重。
フレーザー錯視の作画なんかに使えるかも・・・?

t=tick
mc(120,120,70,6,0,32)
mc(120,120,50,4,0,32)
mc(120,120,35,3,0,32)
mc(120,120,25,2,0,32)
mc(120,120,100,8,0,32)
soft1(tick-t)
input()

'中心,半径,太さ,位相,捻り数'
func mc(x,y,r,w,t,n){
    n=360/n
    l=r-w/2.0
    h=r+w/2.0
    l2=l*l
    h2=h*h
    origin(x,y)
    for(i=int(h);i>=0;--i){
        for(f=0,i2=i*i,j=int(sqrt(h2-i2))+1;j>=0;--j){
            if(d=i2+j*j,d>=l2&&d<=h2){
                d2=sqrt(d)
                t2=int(d2*1.8+t)
                c=0
                pco=cos(t2)
                psi=sin(t2)
                do{
                    co=cos(t2=t2+n)
                    si=sin(t2)
                }while((i*si+j*co^i*psi+j*pco)>=0&&(pco=co,psi=si,++c))
                setpixel(i,j,c=-(c&1))
                setpixel(-j,i,c)
                setpixel(j,-i,c)
                setpixel(-i,-j,c)
                f=1
            }elsif(f){
                break
            }
        }
    }
}