home *** CD-ROM | disk | FTP | other *** search
/ ftp.cs.arizona.edu / ftp.cs.arizona.edu.tar / ftp.cs.arizona.edu / icon / historic / v941.tgz / icon.v941src.tar / icon.v941src / ipl / gprogs / koch.icn < prev    next >
Text File  |  2000-07-29  |  2KB  |  88 lines

  1. ############################################################################
  2. #
  3. #       File:     koch.icn
  4. #
  5. #    Subject:  Program to demonstrate Koch curves
  6. #
  7. #    Author:   Stephen B. Wampler
  8. #
  9. #    Date:     October 14, 1992
  10. #
  11. ############################################################################
  12. #
  13. #   This file is in the public domain.
  14. #
  15. ############################################################################
  16. #
  17. #    Version:  1.0
  18. #
  19. ############################################################################
  20. #
  21. #
  22. #   Comments: This program shows how Koch curves work.
  23. #
  24. #    See the procedure 'helpmsg' for command line options
  25. #
  26. #    Waits for a window event before closing window
  27. #
  28. ############################################################################
  29. #
  30. #  Links: glib, wopen
  31. #
  32. ############################################################################
  33. #
  34. #  Requires:  Version 9 graphics and co-expressions (for glib.icn)
  35. #
  36. ############################################################################
  37.  
  38. link glib
  39. link wopen
  40.  
  41. global win, mono, h, w
  42. global Window, XMAX, YMAX
  43.  
  44. procedure main (args)
  45.     local arg, nextarg
  46.  
  47.     XMAX := YMAX := 700                 # physical screen size
  48.     w := h := 1.0
  49.    
  50.     nextarg := create !args
  51.     while arg := @nextarg do {
  52.        if arg == ("-help"|"-h") then stop(helpmsg())
  53.        }
  54.  
  55.     win := WOpen("label=Koch Snowflake", "width="||XMAX, "height="||YMAX)
  56.     mono := WAttrib (win, "depth") == "1"
  57.     Window := set_window(win, point(0,0), point(w,h),
  58.                   viewport(point(0,0), point(XMAX, YMAX), win))
  59.  
  60.     EraseArea(win)
  61.  
  62.     Fg(win, "black")
  63.  
  64. #    koch_line(Window, point(0.25,0.25), point(0.75,0.25), 5)
  65. #    koch_line(Window, point(0.75,0.25), point(0.50,0.67), 5)
  66. #    koch_line(Window, point(0.50,0.67), point(0.25,0.25), 5)
  67.  
  68.     koch_line(Window, point(0.00,0.67), point(0.50,0.67), 5)
  69.     koch_line(Window, point(0.50,0.67), point(0.25,0.25), 5)
  70.     koch_line(Window, point(0.25,0.25), point(0.00,0.67), 5)
  71.  
  72.     koch_line(Window, point(0.25,0.25), point(0.50,0.67), 5)
  73.     koch_line(Window, point(0.50,0.67), point(0.75,0.25), 5)
  74.     koch_line(Window, point(0.75,0.25), point(0.25,0.25), 5)
  75.  
  76.     koch_line(Window, point(0.50,0.67), point(1.00,0.67), 5)
  77.     koch_line(Window, point(1.00,0.67), point(0.75,0.25), 5)
  78.     koch_line(Window, point(0.75,0.25), point(0.50,0.67), 5)
  79.  
  80.     Event(win)
  81.     close(win)
  82. end
  83.  
  84. procedure helpmsg()
  85.    write("Usage: Koch")
  86.    return
  87. end
  88.