sx = 320 : sy = 240 : vv = 100 : r = 0. : sa = 0.3
pi = 3.14159
repeat
redraw 0 : color : boxf : color $FF : circle sx-vv,sy-vv,sx+vv,sy+vv,0
k = atan(mousey-sy, mousex-sx)

if k < r {
if absf(k-r) > absf(k+pi*2-r) : r+=0.1 : else : r-=0.1
}
if k > r {
if absf(k-r) < absf(k+(pi*-2)-r) : r+=0.1 : else : r-=0.1
}
if r>pi : r-=pi*2
if r<-pi : r+=pi*2

si = sin(r)*vv : co = cos(r)*vv
ex = sx+co-8 : ey = sy+si-8
pos ex,ey : mes "●" : title ""+k+"/"+r
redraw 1 : await 30 : loop

整理してないけどこんな感じで出来た。
・k<rの時は、rは[k]と[k+6.28]のどちらに近いかを見てから動く方向を決める
・rは-3.14〜+3.14の範囲でなければならないので、その範囲を越える時に値を修正