aUCBLogo Demos and Tests / median_figures


to median_figures [4] [1] [imax 10000] [rand? false]
   
if <= [stop]
   
if f+== [stop]
   
x=Array n
   
mx=Array n
   
c=Array n
   
r=300
   
ifelse rand?
   
[   repeat n
      
[   phi=360*repCount/n
         
x.repCount=(List 2*rnd-1  2*rnd-1)*r
         
c.repCount=HSB 360*repCount/(n+11 1
      
]
   
][
      
repeat n
      
[   phi=360*repCount/n
         
x.repCount=(List Cos phi  Sin phi)*r
         
c.repCount=HSB 360*repCount/(n+11 1
      
]
   
]
   
i=n+1
   
c0=HSB 0 1 1
   
setSC 0
   
setUpdateGraph false
;   setSaveSize [400 300]
   
(pr [Keys: enter=updateGraph c=clean z=zoom s=save esc=stop])
   
until [repcount imax]
   
[   line x c
      
line (list x.n x.1c0

      
x=(x*rotate -1)/(f+1)
      
if Key? 
      
[   dispatchMessages
         
ch=readChar
         
if ch==char 13 [updateGraph]
         
if ch=="c [clean]
         
if ch=="z [zoom]
         
if ch=="s 
         
[   PU setXY -400 -300 
            
bmp=BitCopy 800 600
            
saveImage bmp "median_figures.png
         
]
         
if ch==char 27 [stop]
      
]
      
if (mod repcount 1000) == [updateGraph]
   
]
   
updateGraph
end

to zoom
   
maxx=-10000
   
maxy=-10000
   
minx10000
   
miny10000
   
repeat n
   
[   i=repcount
      
if (first x.i) > maxx [maxx=first x.i]
      
if last x.i) > maxy [maxylast x.i]
      
if (first x.i) < minx [minx=first x.i]
      
if last x.i) < miny [minylast x.i]
   
]
   
x0=list minx miny
   
extend=list maxx-minx maxy-miny   
   
normextend=list 800 600
   
normx0=list -400 -300
   
if extend.1 != and2 extend.2 != 0
   
[   repeat n
      
[   i=repCount
         
x.i=(x.i-x0)/extend*normextend+normx0
      
]
      
clean
   
]
end