aUCBLogo Demos and Tests / 3dplot


be 3dplot
   
perspective
   
setpc 1
   
setPenSize [0 0]
   
ht
   
cs
   
   
local [phi eye]
   
ifelse Name? "framenr [phi=framenr*10][phi=0]
   
dphi=5
   
eye=array 3
   
eye.150
   
eye.2=200
   
eye.3=500
   
   
;HELICOID
   ;DRAW[..].. here when using redraw
   
draw [-0.6 0.6 0.04] 
      
[-1.5*pi 1.5*pi 0.15]
      
[size*u*radcos v]
      
[size*u*radsin v]
      
[size/c*v]
      
[size 150 6]
      
[offset [0 0 0]]
   
   
pr [press or be change rotation speedESC exits]
   
forever
   
[   ;cs
      
make "phi phi+dphi
      
eye.1= -500*sin phi
      
eye.3=500*cos phi
      
seteye eye {0 0 0}{0 1 0}
      
redraw
      
if Name? "framenr [break]
      
dispatchMessages
      
if key? 
      
[   ch=readChar
         
if ch=="+ [dphi=dphi+1]
         
if ch=="- [dphi=dphi-1]
         
if ch==char 27 [break]
      
]
      
waitms 10
      
gc
   
]
   
show "finished
   
;unicon "commander

   
be draw urange vrange xexpr yexpr zexpr param plotparam
      
; urange u VALUES [start finish incr]. CAN INVOLVE PRAMETERS GIVEN IN param
      ; vrange v VALUES [start finish incr]. CAN INVOLVE PRAMETERS GIVEN IN param
      ; xexpr etc. PARAMETRIC EQNS IN u AND v. OTHER PARAMS DEFINED IN param
      ; param  EQN PARAMETERS AND VALUES. MUST NOT INVOLVE u and v
      ; plotparam  offset IN FORM [<x> <y> <z>] ;eyepos IN FORM {<x> <y> <z>}
      
assign_val param assign_val plotparam
   
      
local [xoff yoff zoff u_start u_end v_start v_end uincr vincr]
         
xoff=run (list first ::offset)
         
yoff=run (list first bf ::offset)
         
zoff=run (list last ::offset)
      
u_start=run (list first urange)
        
u_end=run (list first bf urange)
      
v_start=run (list first vrange)
        
v_end=run (list first bf vrange)
        
uincr=run (list last urange)
        
vincr=run (list last vrange)
      
local [u v]
      
u=u_start
      
pu
      
repeat (round (u_end-u_start)/uincr)+1
      
[   v=v_start
         
repeat (round (v_end-v_start)/vincr)+1
         
[   cell u v uincr vincr 
            
v=v+vincr
         
]
         
u=u+uincr
      
]
   
      
be cell u v uincr vincr   ;CELL PLOT
         
setxyz xoff+x u v  yoff+y u v zoff+z u v
         
pd
         
setxyz xoff+x u+uincr v  yoff+y u+uincr ~
               
v zoff+z u+uincr v
         
setxyz xoff+x u+uincr v+vincr  yoff+y ~
               
u+uincr v+vincr zoff+z u+uincr v+vincr
         
setxyz xoff+x u v+vincr  yoff+y u v+vincr ~
               
zoff+z u v+vincr
         
setxyz xoff+x u v  yoff+y u v zoff+z u v
         
pu
      
end
      
      
be u v
         
op run xexpr
      
end
      
      
be u v
         
op run  yexpr
      
end
      
      
be u v
         
op run zexpr
      
end
   
end
end

to assign_val val_list    ;ASSIGNS PARAMETER VALUES
   
if empty? val_list stop]
   
make (first val_listrun (list first bf val_list)
   
assign_val bf bf val_list
end