1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
############################################################################
#
# File: twists.icn
#
# Subject: Procedures to produce traces of "twists"
#
# Author: Ralph E. Griswold
#
# Date: May 2, 2001
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# These procedures produce traces of twisting orbits. See
#
# Geometric and Artistic Graphics; Design Generation with
# Microcomputers, Jean-Paul Delahaye, Macmillan, 1987, pp. 73-80.
#
# The arguments specify the starting positions, the extent of the
# drawing, the number of segments, and various parameters that determine
# the orbits.
#
############################################################################
#
# Links: gobject
#
############################################################################
link gobject
procedure twist1(x, y, extent, n, t1, t2, j1, j2, k1, k2, rscale1, rscale2,
sfact, sscale, soff, yfact)
local radius1, radius2, angle, s, s1, s2, c1, c2, i
local jangle1, jangle2, kangle1, kangle2, sangle
radius1 := rscale1 * extent # scaling
radius2 := rscale2 * extent
jangle1 := 2 * &pi / n * j1 * t1
jangle2 := 2 * &pi / n * j2 * t1
kangle1 := 2 * &pi / n * k1 * t2
kangle2 := 2 * &pi / n * k2 * t2
sangle := sfact * &pi / n
every i := 0 to n do {
s := sscale * cos(sangle * i) + soff
c1 := cos(jangle1 * i)
s1 := sin(jangle2 * i)
c2 := s * cos(kangle1 * i)
s2 := s * sin(kangle2 * i)
suspend Point(x + radius1 * c1 + radius2 * (c1 * c2 - s1 * s2),
y + yfact * (radius1 * s1 + radius2 * (s1 * c2 + c1 * s2)))
}
end
procedure twist2(x, y, extent, n, t1, t2, j1, j2, k1, k2, rscale1, rscale2,
sfact, yfact)
local radius1, radius2, angle, s1, s2, c1, c2, i
local jangle1, jangle2, kangle1, kangle2, sangle
radius1 := rscale1 * extent # scaling
radius2 := rscale2 * extent
jangle1 := 2 * &pi / n * j1 * t1
jangle2 := 2 * &pi / n * j2 * t1
kangle1 := 2 * &pi / n * k1 * t2
kangle2 := 2 * &pi / n * k2 * t2
sangle := sfact * &pi / n
every i := 0 to n do {
c1 := cos(jangle1 * i)
s1 := sin(jangle2 * i)
c2 := cos(kangle1 * i)
s2 := sin(kangle2 * i)
suspend Point(x + radius1 * c1 + radius2 * (c1 * c2 - s1 * s2),
y + yfact * (radius1 * s1 + radius2 * (s1 * c2 + c1 * s2)))
}
end
|