summaryrefslogtreecommitdiff
path: root/ipl/gprogs/cquilts.icn
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2013-01-27 23:51:56 +0000
committerIgor Pashev <pashev.igor@gmail.com>2013-01-27 23:51:56 +0000
commit6ab0c0f5bf14ed9c15370407b9ee7e0b4b089ae1 (patch)
tree926065cf45450116098db664e3c61dced9e1f21a /ipl/gprogs/cquilts.icn
downloadicon-6ab0c0f5bf14ed9c15370407b9ee7e0b4b089ae1.tar.gz
Initial upstream version 9.4.3upstream/9.4.3
Diffstat (limited to 'ipl/gprogs/cquilts.icn')
-rw-r--r--ipl/gprogs/cquilts.icn239
1 files changed, 239 insertions, 0 deletions
diff --git a/ipl/gprogs/cquilts.icn b/ipl/gprogs/cquilts.icn
new file mode 100644
index 0000000..633315f
--- /dev/null
+++ b/ipl/gprogs/cquilts.icn
@@ -0,0 +1,239 @@
+############################################################################
+#
+# File: cquilts.icn
+#
+# Subject: Program to create "chaotic square quilts"
+#
+# Author: Ralph E. Griswold
+#
+# Date: March 14, 1995
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# This program creates square quilting patterns as described in
+# "Symmetry in Chaos", Michael Field and Martin Golubitsky, Oxford
+# University Press, 1992.
+#
+# Instead of plotting an image, the values are computed and saved
+# in "numerical carpets" for off-line plotting.
+#
+# The following options are supported:
+#
+# -i i Save carpet files every i iterations; default 100000
+#
+# -p s Prefix for carpet file names, default q_
+#
+# -t i Terminate execution after i iterations; default no limit
+#
+# Warning: This program takes a long time to go through enough iterations
+# to produce nice results.
+#
+# Note: This is an unfinished work, supplied for interest only.
+#
+# There are several sections of parameter values below. All but one
+# is commented out. Change this to get other patterns.
+#
+############################################################################
+#
+# Requires: Version 9 graphics
+#
+############################################################################
+#
+# Links: matrix, options, writecpt
+#
+############################################################################
+
+link matrix
+link options
+link writecpt
+
+global pi_2
+global pi_4
+global pi_6
+
+$define Size 200
+
+procedure main(args)
+ local x, y, xnew, ynew, lambda, alpha, beta, gamma, omega, ma, shift
+ local mcount, sx, sy, xp, yp, max, min, i
+ local count, prefix, iter, opts, interval, limit
+
+ pi_2 := 2 * &pi
+ pi_4 := 4 * &pi
+ pi_6 := 6 * &pi
+
+ iter := 0
+ count := -1
+
+ opts := options(args, "i+p:t+")
+
+ interval := \opts["i"] | 100000
+ prefix := \opts["p"] | "q_"
+ limit := \opts["t"]
+
+ xnew := x := 0.1
+ ynew := y := 0.334
+
+# Sugar and Spice
+
+# lambda := -0.59
+# alpha := 0.2
+# beta := 0.1
+# gamma := -0.27
+# omega := 0.0
+# ma := 0.0
+# shift := 0.5
+
+# Emerald Mosaic
+
+# lambda := -0.59
+# alpha := 0.2
+# beta := 0.1
+# gamma := -0.33
+# omega := 0.0
+# ma := 2.0
+# shift := 0.0
+
+# Sicilian Tile
+
+# lambda := -0.2
+# alpha := -0.1
+# beta := 0.1
+# gamma := -0.25
+# omega := 0.0
+# ma := 0.0
+# shift := 0.0
+
+# Roses
+
+# lambda := 0.25
+# alpha := -0.3
+# beta := 0.2
+# gamma := 0.3
+# omega := 0.0
+# ma := 1.0
+# shift := 0.0
+
+# Wagon Wheels
+
+# lambda := -0.28
+# alpha := 0.25
+# beta := 0.05
+# gamma := -0.24
+# omega := 0.0
+# shift := 0.0
+# ma := -1.0
+
+# Victorian Tiles
+
+# lambda := -0.12
+# alpha := -0.36
+# beta := 0.18
+# gamma := -0.14
+# omega := 0.0
+# shift := 0.5
+# ma := 1.0
+
+# Mosque
+
+# lambda := 0.1
+# alpha := 0.2
+# beta := 0.1
+# gamma := 0.39
+# omega := 0.0
+# shift := 0.0
+# ma := -1.0
+
+# Red Tiles
+
+# lambda := -0.589
+# alpha := 0.2
+# beta := 0.04
+# gamma := -0.2
+# omega := 0.0
+# shift := 0.5
+# ma := 0.0
+
+# Cathedral Attractor
+
+# lambda := -0.28
+# alpha := 0.08
+# beta := 0.45
+# gamma := -0.05
+# omega := 0.0
+# shift := 0.5
+# ma := 0.0
+
+# Gyroscopes
+
+# lambda := -0.59
+# alpha := 0.2
+# beta := 0.2
+# gamma := 0.3
+# omega := 0.0
+# shift := 0.0
+# ma := 2.0
+
+# Cats Eyes
+
+# lambda := -0.28
+# alpha := 0.25
+# beta := 0.05
+# gamma := -0.24
+# omega := 0.0
+# shift := 0.5
+# ma := -1.0
+
+# Flowers with Ribbons
+
+ lambda := -0.11
+ alpha := -0.26
+ beta := 0.19
+ gamma := -0.059
+ omega := 0.07
+ shift := 0.5
+ ma := 2.0
+
+ mcount := create_matrix(Size, Size, 0)
+
+ repeat {
+
+ # iterate
+ sx := sin(pi_2 * x)
+ sy := sin(pi_2 * y)
+ xnew := (lambda + alpha * cos(pi_2 * y)) * sx - omega * sy + beta *
+ sin(pi_4 * x) + gamma * sin(pi_6 * x) * cos(pi_4 * y) + ma *
+ x + shift
+ ynew := (lambda + alpha * cos(pi_2 * x)) * sy + omega * sx + beta *
+ sin(pi_4 * y) + gamma * sin(pi_6 * y) * cos(pi_4 * x) + ma *
+ y + shift
+ if xnew > 1.0 then xnew -:= integer(xnew)
+ else if xnew < 0.0 then xnew +:= integer(-xnew) + 1
+ if ynew > 1.0 then ynew -:= integer(ynew)
+ else if ynew < 0.0 then ynew +:= integer(-ynew) + 1
+ x := xnew
+ y := ynew
+
+ xp := integer(Size * x)
+ yp := integer(Size * y)
+ mcount[xp + 1, yp + 1] +:= 1
+ iter +:= 1
+ if iter % \interval = 0 then {
+ max := 0
+ min := 2 ^ 31
+ every i := mcount[1 to Size, 1 to Size] do {
+ max <:= i
+ min >:= i
+ }
+ if min < 0 then min := 0
+ write_cpt(prefix || right(count +:= 1, 3, "0") || ".cpt",
+ mcount, min, max)
+ }
+ if iter >= \limit then exit()
+ }
+
+end