1
+ using Pkg: @pkg_str
2
+ # For reproducability only dependency this has is Luxor,
3
+ # and it was created with Luxor v1.6.0
4
+ pkg " add Luxor@v1.6"
5
+
6
+ using Luxor
7
+ using Random
8
+
9
+ const bridge_len = 50
10
+
11
+ function chain (jiggle= 0 )
12
+ shaky_rotate (θ) = rotate (θ + jiggle* (rand ()- 0.5 ))
13
+
14
+ # ## 1
15
+ shaky_rotate (0 )
16
+ sethue (Luxor. julia_red)
17
+ link ()
18
+ m1 = getmatrix ()
19
+
20
+
21
+ # ## 2
22
+ sethue (Luxor. julia_green)
23
+ translate (- 50 , 130 );
24
+ shaky_rotate (π/ 3 );
25
+ link ()
26
+ m2 = getmatrix ()
27
+
28
+ setmatrix (m1)
29
+ sethue (Luxor. julia_red)
30
+ overlap (- 1.3 π)
31
+ setmatrix (m2)
32
+
33
+ # ## 3
34
+ shaky_rotate (- π/ 3 );
35
+ translate (- 120 ,80 );
36
+ sethue (Luxor. julia_purple)
37
+ link ()
38
+
39
+ setmatrix (m2)
40
+ setcolor (Luxor. julia_green)
41
+ overlap (- 1.5 π)
42
+ end
43
+
44
+
45
+ function link ()
46
+ sector (50 , 90 , π, 0 , :fill )
47
+ sector (Point (0 , bridge_len), 50 , 90 , 0 , - π, :fill )
48
+
49
+
50
+ rect (50 ,- 3 ,40 , bridge_len+ 6 , :fill )
51
+ rect (- 50 - 40 ,- 3 ,40 , bridge_len+ 6 , :fill )
52
+
53
+ sethue (" black" )
54
+ move (Point (- 50 , bridge_len))
55
+ arc (Point (0 ,0 ), 50 , π, 0 , :stoke )
56
+ arc (Point (0 , bridge_len), 50 , 0 , - π, :stroke )
57
+
58
+ move (Point (- 90 , bridge_len))
59
+ arc (Point (0 ,0 ), 90 , π, 0 , :stoke )
60
+ arc (Point (0 , bridge_len), 90 , 0 , - π, :stroke )
61
+ strokepath ()
62
+ end
63
+
64
+ function overlap (ang_end)
65
+ sector (Point (0 , bridge_len), 50 , 90 , - 0. , ang_end, :fill )
66
+ sethue (" black" )
67
+ arc (Point (0 , bridge_len), 50 , 0 , ang_end, :stoke )
68
+ move (Point (90 , bridge_len))
69
+ arc (Point (0 , bridge_len), 90 , 0 , ang_end, :stoke )
70
+
71
+ strokepath ()
72
+ end
73
+
74
+ # ###################
75
+ # Actually draw it
76
+
77
+ Random. seed! (16 )
78
+ Drawing (450 ,450 , " logo.svg" )
79
+ origin ()
80
+ translate (50 , - 130 );
81
+ chain (0.5 )
82
+ finish ()
83
+ preview ()
0 commit comments