diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2013-01-27 23:51:56 +0000 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2013-01-27 23:51:56 +0000 |
commit | 6ab0c0f5bf14ed9c15370407b9ee7e0b4b089ae1 (patch) | |
tree | 926065cf45450116098db664e3c61dced9e1f21a /ipl/gprogs/mandala.icn | |
download | icon-6ab0c0f5bf14ed9c15370407b9ee7e0b4b089ae1.tar.gz |
Initial upstream version 9.4.3upstream/9.4.3
Diffstat (limited to 'ipl/gprogs/mandala.icn')
-rw-r--r-- | ipl/gprogs/mandala.icn | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/ipl/gprogs/mandala.icn b/ipl/gprogs/mandala.icn new file mode 100644 index 0000000..4ccbb37 --- /dev/null +++ b/ipl/gprogs/mandala.icn @@ -0,0 +1,80 @@ +############################################################################ +# +# File: mandala.icn +# +# Subject: Program to draw mandala design +# +# Author: Ralph E. Griswold +# +# Date: September 13, 1997 +# +############################################################################ +# +# This file is in the public domain. +# +############################################################################ +# +# This program draws "mandala" patterns. +# +# The following options are supported: +# +# -g run continuously; ignore user events; default: process user +# events +# -l i limit on number of iterations, default 2 ^ 10 +# -n i maximum number of points, default 50 +# -s i size of window (width/height); default 256 +# +############################################################################ +# +# Requires: Version 9 graphics +# +############################################################################ +# +# Links: gobject, interact, joinpair, options, wopen +# +############################################################################ + +link gobject +link interact +link joinpair +link options +link wopen + +procedure main(args) + local i, j, k, angle, incr, xpoint, ypoint, size, radius, opts + local extent, max, limit, run, points + + opts := options(args, "gl+n+s+") + + extent := \opts["s"] | 256 + limit := \opts["l"] | (2 ^ 10) + max := \opts["n"] | 50 + run := opts["g"] + + radius := extent / 2 + + WOpen("label=mandala", "width=" || extent, "height=" || extent, + "bg=light gray", "dx=" || (extent / 2), "dy=" || (extent / 2)) | + ExitNotice("Cannot open window.") + + every 1 to limit do { + i := ?max + if i < 4 then i+:= 3 + ?10 # too few doesn't work well ... + points := list(i) + angle := 0.0 + incr := 2 * &pi / i + every j := 1 to i do { + points[j] := Point(radius * cos(angle), radius * sin(angle)) + angle +:= incr + } + joinpair(points, points) + if /run then repeat case Event() of { + "q": exit() + "s": snapshot() + "n": break + } + WDelay(1000) + EraseArea() + } + +end |