home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
300-399
/
ff377.lzh
/
PowerLOGO
/
Examples
/
Turtles
< prev
Wrap
Text File
|
1990-10-10
|
7KB
|
248 lines
; Examples of turtle graphics procedures.
; *********************************************************************
; turtle ( bit-planes )
; Prepare screen, window, and turtle for simple turtle graphics.
if not buriedp "turtle [
make "turtle [
procedure [ [ ] [ :d ] ]
if numberp :d [ ] [ make "d 1 ]
( intuition 6 @0 )
recycle
make "s1 ( openscreen 3 :d [ turtle ] )
make "w1 openwindow :s1
make "t1 openturtle :w1
setrgb :s1 0 [ 0 0 0 ]
setrgb :s1 1 [ 14 14 14 ]
( intuition 2 @0 0 0 )
( intuition 8 @0 550 54 )
if < 300 peek -2 psum peek 0 :s1 14
[ ( intuition 1 @0 0 350 ) ]
[ ( intuition 1 @0 0 150 ) ]
( intuition 6 @0 ) ]
] [ ]
; *********************************************************************
; starspi
; Crazy spirals.
make "starspi [
procedure [ [ ] [ ] [ :r1 :r2 :a1 :a2 :d :df ] ]
clean
home
setrgb :s1 1 item + 1 random 7 [ [ 15 15 15 ]
[ 15 0 0 ]
[ 15 15 0 ]
[ 0 15 0 ]
[ 0 15 15 ]
[ 3 2 15 ]
[ 15 0 15 ] ]
make "r1 + 30 random 25
make "r2 + 3 random 5
make "a1 * rand 360
make "a2 * rand 180
make "d 5
make "df + 1.05 * 0.25 rand
repeat :r1 [
repeat :r2 [
fd :d
rt :a2 ]
make "d * :d :df
rt :a1 ]
starspi
stop ]
; *********************************************************************
; tree size limit factor angle
; A simple turtle tree.
; tree 50 5 0.5 45
; tree 50 2 0.7 90
; tree 40 3 0.6 15
make "tree [
procedure [ [ :size :limit :f :angle ] ]
if < :size :limit [ fd :size bk :size stop ] [ ]
fd :size
rt :angle
tree * :size :f :limit :f :angle
lt + :angle :angle
tree * :size :f :limit :f :angle
rt :angle
bk :size ]
; *********************************************************************
; poly size sides
; Polygon.
make "poly [
procedure [ [ :size :sides ] [ ] [ :angle ] ]
make "angle / 360 :sides
repeat :sides [ fd :size rt :angle ] ]
; *********************************************************************
; golden-rect size
; Golden mean rectangle.
make "golden-rect [
procedure [ [ :size ] [ ] [ :m1 :m2 ] ]
make "m1 1.61803398874989
while [ not = :m1 :m2 ] [
make "m2 :m1
make "m1 + / 1 :m1 1 ]
golden-rect1 :size ]
make "golden-rect1 [
procedure [ [ :size ] [ ] [ :ms ] ]
make "ms / :size :m1
fd :size
rt 90
fd :ms
rt 90
fd :size
rt 90
if < 0.2 :ms [ golden-rect1 :ms stop ] [ ] ]
; *********************************************************************
; s-dragon size limit angle
; Size limit dragon.
; s-dragon 50 5 45
make "s-dragon [
procedure [ [ :size :size-limit :angle1 ] [ ] [ :leg1 :leg2 :angle2 ] ]
make "angle2 - 90 :angle1
make "leg1 / * 0.5 sin - 180 * 2 :angle1 sin :angle1
make "leg2 / * 0.5 sin - 180 * 2 :angle2 sin :angle2
s-dragon1 :size 1 ]
make "s-dragon1 [
procedure [ [ :size :par ] ]
if > :size-limit :size [ fd :size stop ] [ ]
if >0 :par
[ rt :angle1
s-dragon1 * :size :leg1 1
lt 90
s-dragon1 * :size :leg2 -1
rt :angle2 ]
[ lt :angle2
s-dragon1 * :size :leg2 1
rt 90
s-dragon1 * :size :leg1 -1
lt :angle1 ] ]
; Lots of dragons.
make "s-dragons [
procedure [ [ ] [ ] [ :angle :size-limit ] ]
make "size-limit 80
while [ make "size-limit / :size-limit 3 > :size-limit 0.5 ] [
make "angle 0
while [ make "angle + :angle 5 < :angle 90 ] [
clean
home
pu
lt 70
bk 52
lt 20
pd
s-dragon 100 :size-limit :angle ] ] ]
; *********************************************************************
; d-dragon size limit angle
; Depth limit dragon
; d-dragon 50 5 45
make "d-dragon [
procedure [ [ :size :depth-limit :angle1 ] [ ] [ :leg1 :leg2 :angle2 ] ]
make "angle2 - 90 :angle1
make "leg1 / * 0.5 sin - 180 * 2 :angle1 sin :angle1
make "leg2 / * 0.5 sin - 180 * 2 :angle2 sin :angle2
d-dragon1 :size :depth-limit 1 ]
make "d-dragon1 [
procedure [ [ :size :depth-limit :par ] ]
if > 1 :depth-limit [ fd :size stop ] [ ]
make "depth-limit - :depth-limit 1
if >0 :par
[ rt :angle1
d-dragon1 * :size :leg1 :depth-limit 1
lt 90
d-dragon1 * :size :leg2 :depth-limit -1
rt :angle2 ]
[ lt :angle2
d-dragon1 * :size :leg2 :depth-limit 1
rt 90
d-dragon1 * :size :leg1 :depth-limit -1
lt :angle1 ] ]
; Lots of dragons.
make "d-dragons [
procedure [ [ ] [ ] [ :angle :depth-limit ] ]
make "depth-limit 3
while [ make "depth-limit + :depth-limit 3 < :depth-limit 12 ] [
make "angle 0
while [ make "angle + :angle 5 < :angle 90 ] [
clean
home
pu
lt 70
bk 52
lt 20
pd
d-dragon 100 :depth-limit :angle ] ] ]
; *********************************************************************
; fern size size-limit
; A simple fern leaf.
; fern 50 0.5
make "fern [
procedure [ [ :size :limit ] ]
if > :limit :size [ stop ] [ ]
fd * 0.18 :size
rt 4
fern * 0.82 :size :limit
rt 58
fern * 0.3 :size :limit
lt 122
fern * 0.3 :size :limit
rt 60
bk * 0.18 :size ]
; *********************************************************************
; fern2 size size-limit curl thickness node-spacing branch-angle
; A more versatile fern leaf.
; fern2 90 3 2 0.2 0.1 60
; fern2 90 3 2 0.3 0.18 60
; fern2 90 2 4 0.35 0.3 60
make "fern2 [
procedure [ [ :size :limit :curl :thick :nspace :angle ] [ ]
[ :d1 :d2 :a1 ] ]
make "d1 * :size :nspace
make "d2 * - 1 :nspace :size
fd :d1
if > :limit :size
[ make "a1 atan / :thick - 1 :nspace
fd :d2
rt :a1
bk :d2
fd :d2
lt + :a1 :a1
bk :d2
fd :d2
rt :a1
bk :d2 ]
[ rt :curl
fern2 :d2 :limit :curl :thick :nspace :angle
rt - :angle :curl
fern2 * :thick :size :limit :curl :thick :nspace :angle
lt + :angle :angle
fern2 * :thick :size :limit :curl :thick :nspace :angle
rt :angle ]
bk :d1 ]