Skip to content

Commit f9c1b5d

Browse files
author
Jakub Klinkovský
committed
initial commit
0 parents  commit f9c1b5d

18 files changed

Lines changed: 776 additions & 0 deletions

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
*.py[cod]
2+
__pycache__/

H-tree.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#!/usr/bin/env python
2+
3+
from turtle import *
4+
import random
5+
6+
def zelva(level, size, angle=90, par=1/sqrt(2)):
7+
if level <= 0:
8+
return
9+
10+
forward(size)
11+
left(angle)
12+
zelva(level-1, size * par, angle, par)
13+
right(angle * 2)
14+
zelva(level-1, size * par, angle, par)
15+
left(angle)
16+
backward(size)
17+
18+
def stochastic(level, size, angle, par, factor=0.3):
19+
if level <= 0:
20+
return
21+
22+
size2 = size * (1 + random.randrange(-factor, factor, int=float))
23+
angle2 = angle * (1 + random.randrange(-factor, factor, int=float))
24+
forward(size2)
25+
left(angle2)
26+
stochastic(level-1, size * par, angle, par, factor)
27+
right(angle2 * 2)
28+
stochastic(level-1, size * par, angle, par, factor)
29+
left(angle2)
30+
backward(size2)
31+
32+
tracer(600, 0)
33+
speed(0)
34+
hideturtle()
35+
36+
# go to start
37+
left(90)
38+
penup()
39+
backward(300)
40+
pendown()
41+
42+
## klasický H-strom
43+
#zelva(10, 300, angle=90, par=1/sqrt(2))
44+
45+
## pootočený H-strom
46+
#zelva(10, 300, angle=85, par=0.69)
47+
48+
## Pythagorův strom
49+
zelva(10, 200, angle=45, par=1/sqrt(2))
50+
51+
## stochastický H-strom (factor - max. odchylka)
52+
#stochastic(10, size=200, angle=45, par=1/sqrt(2), factor=0.3)
53+
54+
update()
55+
exitonclick()

H-tree_stochastic.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/usr/bin/env python
2+
3+
from turtle import *
4+
import math
5+
import random
6+
7+
start_position = (0, -300)
8+
start_heading = 90
9+
size = 200
10+
11+
def stochastic(level, size, angle, par, factor=0.3):
12+
if level <= 0:
13+
return
14+
15+
size2 = size * (1 + random.uniform(-factor, factor))
16+
angle2 = angle * (1 + random.uniform(-factor, factor))
17+
forward(size2)
18+
left(angle2)
19+
stochastic(level-1, size * par, angle, par, factor)
20+
right(angle2 * 2)
21+
stochastic(level-1, size * par, angle, par, factor)
22+
left(angle2)
23+
backward(size2)
24+
25+
tracer(600, 0)
26+
speed(0)
27+
hideturtle()
28+
penup()
29+
setpos(start_position)
30+
setheading(start_heading)
31+
pendown()
32+
33+
stochastic(10, size=200, angle=45, par=1/math.sqrt(2), factor=0.3)
34+
35+
update()
36+
exitonclick()

arrowhead_curve.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#!/usr/bin/env python
2+
3+
from turtle import *
4+
5+
iteration = 6
6+
position = (-300, -240)
7+
heading = 0
8+
size = 600
9+
10+
def arrowhead_curve(iteration, size, direction=1):
11+
if iteration == 0:
12+
forward(size)
13+
14+
else:
15+
left(60 * direction)
16+
arrowhead_curve(iteration-1, size/2, -direction)
17+
right(60 * direction)
18+
arrowhead_curve(iteration-1, size/2, direction)
19+
right(60 * direction)
20+
arrowhead_curve(iteration-1, size/2, -direction)
21+
left(60 * direction)
22+
23+
if __name__ == "__main__":
24+
speed(0)
25+
tracer(600, 0)
26+
hideturtle()
27+
penup()
28+
setpos(position)
29+
setheading(heading)
30+
pendown()
31+
32+
arrowhead_curve(iteration, size)
33+
34+
update()
35+
exitonclick()

caesaro_fractal.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/usr/bin/env python
2+
3+
from turtle import *
4+
5+
from koch_curve import koch_curve
6+
7+
iteration = 6
8+
position = (-300, -300)
9+
heading = 0
10+
size = 600
11+
12+
def caesaro(iteration, size):
13+
for i in range(4):
14+
koch_curve(iteration, size, 85)
15+
left(90)
16+
17+
if __name__ == "__main__":
18+
speed(0)
19+
tracer(600, 0)
20+
hideturtle()
21+
penup()
22+
setpos(position)
23+
setheading(heading)
24+
pendown()
25+
26+
caesaro(iteration, size)
27+
28+
update()
29+
exitonclick()

dragon_curve.py

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
#!/usr/bin/env python
2+
3+
from turtle import *
4+
import time
5+
import math
6+
7+
8+
def dragon(iteration, step, direction=1):
9+
if iteration <= 0:
10+
forward(step)
11+
return
12+
13+
right(45 * direction)
14+
dragon(iteration-1, step / math.sqrt(2), 1)
15+
left(90 * direction)
16+
dragon(iteration-1, step / math.sqrt(2), -1)
17+
right(45 * direction)
18+
19+
# "backwards" (swapped direction)
20+
def dragon2(iteration, step, direction=1):
21+
if iteration <= 0:
22+
forward(step)
23+
return
24+
25+
right(45 * direction)
26+
dragon2(iteration-1, step / math.sqrt(2), -1)
27+
left(90 * direction)
28+
dragon2(iteration-1, step / math.sqrt(2), 1)
29+
right(45 * direction)
30+
31+
colors = ["#4bd31f", "#3eff00", "#2bb200", "#90ff45"] * 30
32+
def changeColor():
33+
pencolor(colors.pop())
34+
def doprava(drak=dragon):
35+
changeColor()
36+
setheading(0)
37+
drak(17, 300)
38+
def nahoru(drak=dragon):
39+
changeColor()
40+
setheading(90)
41+
drak(17, 300)
42+
def doleva(drak=dragon):
43+
changeColor()
44+
setheading(180)
45+
drak(17, 300)
46+
def dolu(drak=dragon):
47+
changeColor()
48+
setheading(270)
49+
drak(17, 300)
50+
51+
tracer(600, 0)
52+
speed(0)
53+
54+
def run1():
55+
for i in xrange(15):
56+
reset()
57+
hideturtle()
58+
penup()
59+
setpos(-200, 100)
60+
pendown()
61+
dragon(i, 470)
62+
update()
63+
time.sleep(1)
64+
exitonclick()
65+
66+
def run2():
67+
tracer(600, 0)
68+
speed(0)
69+
hideturtle()
70+
71+
for drak in [doprava, nahoru, doleva, dolu]:
72+
penup()
73+
home()
74+
pendown()
75+
drak(dragon2)
76+
update()
77+
exitonclick()
78+
79+
#run1()
80+
#run2()
81+
82+
# export
83+
size = 1600
84+
border = 10
85+
color = "blue"
86+
for i in range(0,17):
87+
screensize(size, size)
88+
hideturtle()
89+
pensize(3)
90+
pencolor(color)
91+
fillcolor(color)
92+
penup()
93+
goto(-window_width()/2+size/4.1, window_height()/2-size*0.4)
94+
pendown()
95+
96+
dragon(i, size/1.55)
97+
update()
98+
99+
cv = getcanvas()
100+
cv.postscript(file="/media/data/Bordýlek/Dračí křivka/dragon-"+color+"-"+str(i+1)+".ps", width=size+2*border, height=size+2*border)
101+
102+
reset()

dragon_curve_animation.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/usr/bin/env python
2+
3+
from turtle import *
4+
import time
5+
from math import sqrt
6+
7+
start_position = (-200, 100)
8+
size = 600
9+
10+
def dragon_curve(iteration, size, direction=1):
11+
if iteration == 0:
12+
forward(size)
13+
14+
else:
15+
right(45 * direction)
16+
dragon_curve(iteration-1, size / sqrt(2), 1)
17+
left(90 * direction)
18+
dragon_curve(iteration-1, size / sqrt(2), -1)
19+
right(45 * direction)
20+
21+
tracer(600, 0)
22+
speed(0)
23+
for i in range(1, 17):
24+
reset()
25+
hideturtle()
26+
penup()
27+
setpos(start_position)
28+
pendown()
29+
dragon_curve(i, size)
30+
update()
31+
time.sleep(1)
32+
exitonclick()

export.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# export
2+
size = 1600
3+
border = 10
4+
color = "blue"
5+
for i in range(0,17):
6+
screensize(size, size)
7+
hideturtle()
8+
pensize(3)
9+
pencolor(color)
10+
fillcolor(color)
11+
penup()
12+
goto(-window_width()/2+size/4.1, window_height()/2-size*0.4)
13+
pendown()
14+
#~ #~
15+
dragon(i, size/1.55)
16+
update()
17+
#~ #~
18+
cv = getcanvas()
19+
cv.postscript(file="/media/data/Bordýlek/Dračí křivka/dragon-"+color+"-"+str(i+1)+".ps", width=size+2*border, height=size+2*border)
20+
#~ #~
21+
reset()

hvezdy.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/usr/bin/env python
2+
3+
from turtle import *
4+
import time
5+
import math
6+
7+
def polygram(n, variant=1, a=300):
8+
pendown()
9+
if variant == 1:
10+
right(360/n)
11+
for i in range(n):
12+
forward(a)
13+
right(2*360/n)
14+
left(360/n)
15+
16+
elif variant == 2:
17+
right(90-90/n)
18+
for i in range(n):
19+
forward(a)
20+
right(180-180/n)
21+
left(90-90/n)
22+
penup()
23+
24+
def star(n, a=200, zaklad=100):
25+
uhel1 = 180 - 2*math.asin(zaklad/2/a)/math.pi*180 # doplněk do 180 vnitřního úhlu hvězdy
26+
uhel2 = -360/n+2*math.acos(zaklad/2/a)/math.pi*180 # doplněk do 180 vnějšího úhlu hvězdy
27+
print(uhel1, uhel2)
28+
left(math.acos(zaklad/2/a)/math.pi*180)
29+
for i in range(n):
30+
forward(a)
31+
right(uhel1)
32+
forward(a)
33+
left(uhel2)
34+
35+
#for i in range(3, 10):
36+
# hideturtle()
37+
# speed(0)
38+
# polygon(i)
39+
# time.sleep(1)
40+
# bye()
41+
42+
#hideturtle()
43+
#tracer(600, 0)
44+
speed(0)
45+
penup()
46+
for i in range(5,19,2):
47+
goto(-550+150*(i-5), 400)
48+
polygram(i, variant=1, a=1500/i)
49+
50+
goto(-550+150*(i-5), 0)
51+
polygram(i, variant=2, a=300)
52+
#star(20, 100, 50)
53+
update()
54+
exitonclick()

0 commit comments

Comments
 (0)