Skip to content

Commit bf2510a

Browse files
committed
dragon
1 parent c12806f commit bf2510a

File tree

6 files changed

+148
-0
lines changed

6 files changed

+148
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
# main.py level:8, false, width:10
3+
4+
![#1](imgs/main-1-level_8_false_width_10.png?raw=true)
5+
6+
# main.py level:8, true, width:10
7+
8+
![#1](imgs/main-1-level_8_true_width_10.png?raw=true)
9+
10+
# main.py level:10, false, width:5
11+
12+
![#1](imgs/main-1-level_10_false_width_5.png?raw=true)
Loading
Loading
Loading
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#!/usr/bin/env python3
2+
3+
# https://en.wikipedia.org/wiki/Dragon_curve
4+
# https://en.wikipedia.org/wiki/L-system
5+
6+
# https://pl.wikipedia.org/wiki/Smok_Heighwaya
7+
# https://pl.wikipedia.org/wiki/L-system
8+
9+
# https://en.wikipedia.org/wiki/Sierpinski_triangle
10+
11+
import turtle
12+
13+
# --- functions ---
14+
15+
def dragon(level=1, remove_plus_minus=False, width=5):
16+
17+
a = 'FX'
18+
19+
rule = {
20+
'X': 'X+YF+',
21+
'Y': '-FX-Y',
22+
'-': '-',
23+
'+': '+',
24+
'F': 'F',
25+
}
26+
27+
for _ in range(level):
28+
a = ''.join(rule[x] for x in a)
29+
30+
print('len:', len(a))
31+
32+
a = a.replace('X', '').replace('Y','')
33+
print('len without X, Y:', len(a))
34+
35+
if remove_plus_minus:
36+
a = a.replace('+-', '').replace('-+', '')
37+
print('len without -+, +-:', len(a))
38+
39+
for x in a:
40+
if x == 'F':
41+
turtle.forward(width)
42+
elif x == '+':
43+
turtle.right(90)
44+
turtle.color('red')
45+
elif x == '-':
46+
turtle.left(90)
47+
turtle.color('green')
48+
49+
print('OK')
50+
51+
# --- main ---
52+
53+
# clear everything
54+
turtle.reset()
55+
56+
# the fastest turtle
57+
turtle.speed(0)
58+
59+
# hide turtle
60+
turtle.hideturtle()
61+
62+
63+
dragon(10, False, 10)
64+
65+
66+
# keep open window
67+
turtle.exitonclick()
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#!/usr/bin/env python
2+
3+
# https://studio.code.org/c/35859693/edit
4+
5+
import turtle
6+
7+
# --- functions ---
8+
9+
def draw_1(length, level):
10+
if level < 1:
11+
turtle.fd(length)
12+
else:
13+
length = length/3
14+
15+
draw_1(length, level-1)
16+
turtle.left(90)
17+
draw_1(length, level-1)
18+
turtle.right(90)
19+
draw_1(length, level-1)
20+
turtle.right(90)
21+
draw_1(length, level-1)
22+
turtle.left(90)
23+
draw_1(length, level-1)
24+
25+
def draw_2(length, level):
26+
if level < 1:
27+
turtle.fd(length)
28+
else:
29+
length = length/3
30+
31+
draw_2(length, level-1)
32+
turtle.left(60)
33+
draw_2(length, level-1)
34+
turtle.right(180-60)
35+
draw_2(length, level-1)
36+
turtle.left(60)
37+
draw_2(length, level-1)
38+
39+
def turn_left(width, step, draw):
40+
for _ in range(4):
41+
draw(width, step)
42+
turtle.left(90)
43+
44+
def turn_right(width, step, draw):
45+
for _ in range(4):
46+
draw(width, step)
47+
turtle.right(90)
48+
49+
# --- main ---
50+
51+
# clear everything
52+
turtle.reset()
53+
54+
# the fastest turtle
55+
turtle.speed(0)
56+
57+
58+
59+
turn_left(300, 3, draw_1)
60+
turtle.left(90)
61+
turn_right(300, 3, draw_1)
62+
63+
64+
65+
# hide turtle
66+
turtle.hideturtle()
67+
68+
# keep open window
69+
turtle.exitonclick()

0 commit comments

Comments
 (0)