home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lifeos2.zip / LIFE-1.02 / EXAMPLES / FLO_FLOW.LF < prev    next >
Text File  |  1996-06-04  |  4KB  |  147 lines

  1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  3. %
  4. %  GRAMMATICAL DEFINITION OF A FLOWER
  5. %
  6. %
  7. % A simpler version of this definition can be found page 27 of the above
  8. % mentioned book.
  9. %
  10. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  11. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  12.  
  13. module("flower_def") ?
  14.  
  15. public( axiomflower,petal_color,stamen_color,leaf_color,
  16.         stop_draw,stop_drawing,draw_start) ?
  17.  
  18. open("rewrite_trans") ?
  19. open("utils") ?
  20.  
  21. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  22. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  23.  
  24. initAngle(pi/10) ?
  25. probSymbol(seg,5) ?
  26. probSymbol(twoleafs,5) ?
  27.  
  28. axiomflower::> plant ?
  29.  
  30. plant(oldState=>S,newState=>S ) :- stop_draw.  %%% stop_draw makes the drawing
  31.                            %%% stop if stop_drawing is set
  32.                            %%% to true. 
  33. plant ==>
  34.     internode,rpu,
  35.     push,
  36.             rpu(-2*delta),rph(-2*delta),
  37.         push,rpu(-2*delta),leaf,pop,
  38.         internode,
  39.         push,rpu(2*delta),leaf,pop,
  40.         rmu,
  41.         push,plant,flower,pop,
  42.         rpu(2*delta),plant,flower,
  43.     pop,
  44.     push,plant,rpu,flower,pop ?
  45.  
  46.  
  47. internode(oldState=>S,newState=>S ) :- stop_draw. 
  48. internode ==> 
  49.     fd,seg,
  50.     push,rph(-2*delta),rpl(2*delta),leaf,pop,
  51.     push,rph(-2*delta),rpl(-2*delta),leaf,pop,
  52.     fd,seg ?
  53.  
  54.  
  55. seg(oldState=>S,newState=>S ) :- stop_draw .
  56. seg ==>  seg,twoleafs,fd,seg ?
  57. seg ==>  seg,fd,seg ?
  58. seg ==>  seg,fd,seg ?
  59. seg ==>  seg ?
  60. seg ==>  seg ?
  61.  
  62. twoleafs(oldState=>S,newState=>S):- stop_draw.
  63. twoleafs ==> 
  64.     push,rph(-2*delta),rpl(2*delta),leaf,pop,
  65.     push,rph(-2*delta),rpl(-2*delta),leaf,pop ?
  66.  
  67. twoleafs ==> 
  68.     push,rph(-4*delta),rpl(2*delta),leaf,pop,
  69.     push,rph(-4*delta),rpl(-2*delta),leaf,pop ?
  70.  
  71. twoleafs ==> 
  72.     push,rph(-6*delta),rpl(2*delta),leaf,pop,
  73.     push,rph(-6*delta),rpl(-2*delta),leaf,pop ?
  74.  
  75. twoleafs ==> 
  76.     push,rph(-8*delta),rpl(2*delta),leaf,pop,
  77.     push,rph(-8*delta),rpl(-2*delta),leaf,pop ?
  78.  
  79.  
  80. twoleafs ==> 
  81.     push,rph(pi),rpl(2*delta),leaf,pop,
  82.     push,rph(pi),rpl(-2*delta),leaf,pop ?
  83.  
  84.  
  85.  
  86.  
  87. leaf(oldState=>S,newState=>S ) :- stop_draw .
  88. leaf ==>
  89.     push,
  90.          setLeaf,
  91.                 startPol,
  92.                     rpu,fu,dot,rmu,fu(`(2*realDistance)),dot,
  93.                 rmu,fu,dot,rpu,
  94.                                turn,
  95.                             rpu,fu,dot,rmu,fu(`(2*realDistance)),dot,
  96.                 rmu,fu,dot,
  97.                       endPol,
  98.              setDefault,
  99.          pop ?
  100.  
  101.  
  102. flower(oldState=>S,newState=>S):- stop_draw.
  103. flower ==> 
  104.     push,
  105.         pedicel,rmh,petal,rph(2*2*delta),
  106.                         petal,rph(2*2*delta),
  107.             petal,rph(2*2*delta),
  108.             petal,rph(2*2*delta),
  109.             petal,rph(2*2*delta), 
  110.     pop ?
  111.  
  112.  
  113. pedicel(oldState=>S,newState=>S) :- stop_draw .
  114. pedicel ==>  fd(`(2*realDistance)) ?
  115.  
  116.  
  117. petal(oldState=>S,newState=>S )  .
  118. petal ==> push,setStamen,rml,fd,pop,
  119.           push,setPetal,startPol,
  120.                              rpl(2*2*delta),
  121.                              rpu(-2*delta),fu(`(2.5*realDistance)),dot,
  122.                              rpu(2*delta),fu(`(2.5*realDistance)),dot,
  123.                  turn,
  124.                              rpu(-2*delta),fu(`(2.5*realDistance)),dot,
  125.                              rpu(2*delta),fu(`(2.5*realDistance)),dot,
  126.                         endPol,
  127.           setDefault,pop ?
  128.  
  129.  
  130.  
  131. setLeaf(oldState=>S,newState=>S ) :-
  132.     setq(drColor,leaf_color).
  133. setLeaf ==> setLeaf ?
  134.  
  135. setPetal(oldState=>S,newState=>S ) :- setq(drColor,petal_color).
  136. setPetal ==> setPetal ?
  137.  
  138. setStamen(oldState=>S,newState=>S) :-  setq(drColor,stamen_color).
  139. setStamen ==> setStamen ?
  140.  
  141. stop_draw :-  
  142.     cond(stop_drawing, 
  143.          throw(draw_start)).
  144.  
  145. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  146. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  147.