----------------------------- to main; Dome by Olga 3d_frame setpensize[2 2] draw 50 0 end to draw :rad :x if :rad<10[stop] setpc(list 3.19*:x 3.19*:x 0) sph :x/2-50 -65 0 dome :rad draw :rad-.5 :x+1 end to dome :rad lt 90 arc2 180 :rad rt 180 arc2 -90 :rad rt 180 arc2 -90 :rad rt 180 arc2 180 :rad end to procs ed[main draw dome procs] end ------------------------------ to main ; Superstar by Olga 3d_frame setpensize[2 2] repeat 100[star repcount] end to star :size setpc(se 258-2.57*:size 0 0) repeat 4[arc2 90 :size rt 180] bk 1 end to procs ed[main star procs] end ------------------------------ to main ; Comet by Olga 3d_frame setpensize[2 2] sp -80 -80 draw1 85 0 draw2 50 0 end to draw1 :rad :times if :rad<50[stop] setpc(se 3.6*:times 0 0) flame :rad draw1 :rad-.5 :times+1 end to draw2 :rad :times if :rad<1[stop] setpc(se 255-2.6*:times 2.6*:times 0) flame :rad draw2 :rad-.5 :times+1 end to flame :rad arc2 90 :rad rt 180 arc2 -90 :rad arc2 90 :rad*2 rt 90 end to procs ed[main draw1 draw2 flame procs] end --------------------- to main ; Eclipse by Yehuda 3d_frame setpensize[2 2] rt 180 draw 255 end to draw :count if :count<9[stop] sphc 0 0 :count*360/255 (se :count 0 0) arc2 180 40 draw :count-1 end to procs ed[main draw procs] end ------------------------ to main ; Screw by Yehuda 3d_frame setpensize[3 3] draw 0 end to draw :x if :x>91[stop] setpc(se 2.8*:x abs 2.8*ycor 0) sp :x-36 :x-46 lt 2 fd 60 draw :x+.2 end to procs ed[main draw procs] end ----------------------------- to main ; Moire by Yehuda; after a design by Dale Reed> 3d_frame sp 7 7 draw 85 4 "false sp -8 -8 pd draw 85 1 "true end to draw :rad :col :mode setpc :col setfc :col circle :rad repeat 100[fd :rad bk :rad rt 360/100] rt 360/200 pu repeat 50[fd :rad/2 (fill :mode) bk :rad/2 rt 360/50] end to procs ed[main draw procs] end -------------------------------- to aaa ; by Mike Sandy, Nov 2000 cs ht 3d_frame main 25 4 ;20 5 end to main :p.width :strands ;p.width = PEN WIDTH ;strands = NUMBER OF STRANDS(TURTLES) ;aaa 30 5 (col.incr=1) ;aaa 25 6 (col.incr=1) ;aaa 22 7 (col.incr=1) ;aaa 40 4 (col.incr=1) ;aaa 55 3 (col.incr=1) ;ct window setpensize (list 0 :p.width) let[[height 88] ;AMPLITUDE OF PLOT [col.incr 1] ;LENGTH OF COLOUR SEGMENT [cycles 1] ;NUMBER OF CYCLES ; OF TRIANGULAR SINE IN PLOT [range 240] ;PLOT WIDTH [xi -1.2*:range/2] ;INITIAL X [xf .8*:range/2] ;FINAL X [display.range :range*.75] ;DISPLAY RANGE; TIDIES UP ENDS [xdi -1*:display.range/2] [xdf .98*:display.range/2] [coord.a (array :strands 0)] ;INITIAL VALUES OF STRANDS [period int (:xf-:xi)/:cycles] [m 4*:height/:period] ;GRADIENT OF FUNCTION [f.offset 1/:strands] [seg.f.incr 1/(2*:strands)] [pen.col 0] [col.num 1] ] fill.array :strands-1 ;icon "commander (repeat :strands [setturtle repcount-1 ht pu]) loop 0 1 0 :strands*:cycles end to plot :x :xf :f.offset :col.incr :col.num if :x>:xf[pu setpc :pen.col stop] tri.fn :x :f.offset setpc -1*pc+2+remainder :col.num*3+2*:i 11 (ifelse and :x>:xdi :x<:xdf [pd][pu]) plot :x+:col.incr :xf :f.offset :col.incr :col.num end to move :i localmake "u0 item :i :coord.a (ask :i [plot :u0 :u0+:seg.f.incr*:period :i*:f.offset :col.incr :col.num*(1+remainder :i :strands) setitem :i :coord.a :u0+:seg.f.incr*:period ;UPDATES START VALUES ;FOR NEXT PLOT OF :i setpc :pen.col ]) end to fill.array :i (if :i=0 [setitem :i :coord.a :xi+:period*:seg.f.incr/2 stop]) (setitem :i :coord.a :xi+:period*:seg.f.incr*(2*:i-1)/2) fill.array :i-1 end to loop :i :it :ov.und :count ;:COUNT=2*:cycles if :count=0[stop] (if :i=:it [move :i move remainder :i+1 :strands loop remainder :i+1 :strands remainder :it+2 :strands 0 :count-1 stop]) (ifelse 0=:ov.und [move :i move :it ] [move :it move :i ]) loop :i remainder :it+1 :strands -1*:ov.und+1 :count end to tri.fn :x :f.offset local[ xr len] make "xr modulo int :x-:xi-:f.offset*:period :period (ifelse :xr<:period/2 [setxy :x :m*(:xr-:period/4)] [setxy :x :m*(3*:period/4-:xr)]) end to procs ed[aaa main plot move fill.array loop tri.fn procs] end --------------------------------