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
|
.PS
# venus.m4
# https://tex.stackexchange.com/questions/576423/a-more-precise-dance-of-planets-with-metapost-and-tikz
# https://tex.stackexchange.com/questions/575986/dance-of-venus-and-variations-in-tikz-pgf
gen_init
NeedDpicTools
maxpsht = 20
thinlines_
define(`venus',
`setkeys_(`$1',
outerlength:4;
innerlength:2.8933;
outerrate:8;
innerrate:13;
maxtimes:2880;
increment:2;
changephase:0 )
sizefactor = 165/200
nmaxtimes = 360*m4outerrate
for x=0 to nmaxtimes by m4increment do {
if "$2" != "" then { hue = \
abs(sind(360*x/nmaxtimes*abs(m4innerrate-m4outerrate)+m4changephase-60))
hsvtorgb(hue*360,1,1,r,g,b)
line from (Rect_(m4outerlength,x))*sizefactor \
to (Rect_(m4innerlength,x/m4outerrate*m4innerrate))*sizefactor \
outlined rgbstring(r,g,b) } \
else {
line from (Rect_(m4outerlength,x))*sizefactor \
to (Rect_(m4innerlength,x/m4outerrate*m4innerrate))*sizefactor
}
} ')
AA:[
sizefactor = 1/2.54
define(`venusA',`[
setkeys_(`$1',
iterations:270;
outerdistance:5.41;
innerdistance:7.48;
outerperiod:123;
innerperiod:200;
step:5)
for x=0 to m4iterations by m4step do {
line from (Rect_(m4outerdistance,x))*sizefactor \
to (Rect_(m4innerdistance,x/m4outerperiod*m4innerperiod))*sizefactor \
outlined "gray"
}
]')
# 3 columns, 5 rows
sizefactor /= 3
Orig:(0,0)
for i=1 to 5 do {
iteri = 180 + (i-1)*540
for j=1 to 3 do {
if (i==1) && (j==1) then { iter = 270 } \
else { iter = iteri + (j-1)*180 }
V[i,j]: venusA(iterations=iter) with .sw at Orig
sprintf("%g",iter) at last [] #colored rgbstring(1,0,0)
Orig: V[i,j].se
}
Orig: V[i,1].sw-(0,V[i,1].ht)
}
]
BB:[
venus(outerrate=8;innerrate=17;increment=2;innerlength=3.5;changephase=60,T)
] at AA
# ] with .nw at AA.sw+(0,-0.5)
.PE
|