#! /usr/bin/python2.7
""" xturtle-example-suite:
xtx_kites_and_darts.py
Constructs two aperiodic penrose-tilings,
consisting of kites and darts, by the method
of inflation in six steps.
Starting points are the patterns "sun"
consisting of five kites and "star"
consisting of five darts.
For more information see:
http://en.wikipedia.org/wiki/Penrose_tiling
-------------------------------------------
"""
from turtle import *
from math import cos, pi
from time import clock, sleep
f = (5**0.5-1)/2.0 # (sqrt(5)-1)/2 -- golden ratio
d = 2 * cos(3*pi/10)
def kite(l):
fl = f * l
lt(36)
fd(l)
rt(108)
fd(fl)
rt(36)
fd(fl)
rt(108)
fd(l)
rt(144)
def dart(l):
fl = f * l
lt(36)
fd(l)
rt(144)
fd(fl)
lt(36)
fd(fl)
rt(144)
fd(l)
rt(144)
def inflatekite(l, n):
if n == 0:
px, py = pos()
h, x, y = int(heading()), round(px,3), round(py,3)
tiledict[(h,x,y)] = True
return
fl = f * l
lt(36)
inflatedart(fl, n-1)
fd(l)
rt(144)
inflatekite(fl, n-1)
lt(18)
fd(l*d)
rt(162)
inflatekite(fl, n-1)
lt(36)
fd(l)
rt(180)
inflatedart(fl, n-1)
lt(36)
def inflatedart(l, n):
if n == 0:
px, py = pos()
h, x, y = int(heading()), round(px,3), round(py,3)
tiledict[(h,x,y)] = False
return
fl = f * l
inflatekite(fl, n-1)
lt(36)
fd(l)
rt(180)
inflatedart(fl, n-1)
lt(54)
fd(l*d)
rt(126)
inflatedart(fl, n-1)
fd(l)
rt(144)
def draw(l, n, th=2):
clear()
l = l * f**n
shapesize(l/100.0, l/100.0, th)
for k in tiledict:
h, x, y = k
setpos(x, y)
setheading(h)
if tiledict[k]:
shape("kite")
color("black", (0, 0.75, 0))
else:
shape("dart")
color("black", (0.75, 0, 0))
stamp()
def sun(l, n):
for i in range(5):
inflatekite(l, n)
lt(72)
def star(l,n):
for i in range(5):
inflatedart(l, n)
lt(72)
def makeshapes():
tracer(0)
begin_poly()
kite(100)
end_poly()
register_shape("kite", get_poly())
begin_poly()
dart(100)
end_poly()
register_shape("dart", get_poly())
tracer(1)
def start():
reset()
ht()
pu()
makeshapes()
resizemode("user")
def test(l=200, n=4, fun=sun, startpos=(0,0), th=2):
global tiledict
goto(startpos)
setheading(0)
tiledict = {}
a = clock()
tracer(0)
fun(l, n)
b = clock()
draw(l, n, th)
tracer(1)
c = clock()
print "Calculation: %7.4f s" % (b - a)
print "Drawing: %7.4f s" % (c - b)
print "Together: %7.4f s" % (c - a)
nk = len([x for x in tiledict if tiledict[x]])
nd = len([x for x in tiledict if not tiledict[x]])
print "%d kites and %d darts = %d pieces." % (nk, nd, nk+nd)
def demo(fun=sun):
start()
for i in range(8):
a = clock()
test(300, i, fun)
b = clock()
t = b - a
if t < 2:
sleep(2 - t)
def main():
#title("Penrose-tiling with kites and darts.")
mode("logo")
bgcolor(0.3, 0.3, 0)
demo(sun)
sleep(2)
demo(star)
pencolor("black")
goto(0,-200)
pencolor(0.7,0.7,1)
write("Please wait...",
align="center", font=('Arial Black', 36, 'bold'))
test(600, 8, startpos=(70, 117))
return "Done"
if __name__ == "__main__":
msg = main()
mainloop()
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| about_turtle.txt | File | 3.44 KB | 0644 |
|
| about_turtledemo.txt | File | 302 B | 0644 |
|
| demohelp.txt | File | 2.96 KB | 0644 |
|
| tdemo_I_dontlike_tiltdemo.py | File | 1.05 KB | 0755 |
|
| tdemo_I_dontlike_tiltdemo.pyc | File | 1.62 KB | 0644 |
|
| tdemo_I_dontlike_tiltdemo.pyo | File | 1.62 KB | 0644 |
|
| tdemo_bytedesign.py | File | 4.12 KB | 0755 |
|
| tdemo_bytedesign.pyc | File | 5.19 KB | 0644 |
|
| tdemo_bytedesign.pyo | File | 5.19 KB | 0644 |
|
| tdemo_chaos.py | File | 951 B | 0644 |
|
| tdemo_chaos.pyc | File | 2.24 KB | 0644 |
|
| tdemo_chaos.pyo | File | 2.24 KB | 0644 |
|
| tdemo_clock.py | File | 3.14 KB | 0755 |
|
| tdemo_clock.pyc | File | 4.43 KB | 0644 |
|
| tdemo_clock.pyo | File | 4.43 KB | 0644 |
|
| tdemo_colormixer.py | File | 1.31 KB | 0644 |
|
| tdemo_colormixer.pyc | File | 2.31 KB | 0644 |
|
| tdemo_colormixer.pyo | File | 2.31 KB | 0644 |
|
| tdemo_fractalcurves.py | File | 3.33 KB | 0755 |
|
| tdemo_fractalcurves.pyc | File | 3.44 KB | 0644 |
|
| tdemo_fractalcurves.pyo | File | 3.44 KB | 0644 |
|
| tdemo_lindenmayer_indian.py | File | 2.38 KB | 0755 |
|
| tdemo_lindenmayer_indian.pyc | File | 3.52 KB | 0644 |
|
| tdemo_lindenmayer_indian.pyo | File | 3.52 KB | 0644 |
|
| tdemo_minimal_hanoi.py | File | 2 KB | 0755 |
|
| tdemo_minimal_hanoi.pyc | File | 3.54 KB | 0644 |
|
| tdemo_minimal_hanoi.pyo | File | 3.54 KB | 0644 |
|
| tdemo_nim.py | File | 6.36 KB | 0644 |
|
| tdemo_nim.pyc | File | 9.16 KB | 0644 |
|
| tdemo_nim.pyo | File | 9.16 KB | 0644 |
|
| tdemo_paint.py | File | 1.26 KB | 0755 |
|
| tdemo_paint.pyc | File | 1.86 KB | 0644 |
|
| tdemo_paint.pyo | File | 1.86 KB | 0644 |
|
| tdemo_peace.py | File | 1.04 KB | 0755 |
|
| tdemo_peace.pyc | File | 1.36 KB | 0644 |
|
| tdemo_peace.pyo | File | 1.36 KB | 0644 |
|
| tdemo_penrose.py | File | 3.45 KB | 0755 |
|
| tdemo_penrose.pyc | File | 5.86 KB | 0644 |
|
| tdemo_penrose.pyo | File | 5.86 KB | 0644 |
|
| tdemo_planet_and_moon.py | File | 2.76 KB | 0755 |
|
| tdemo_planet_and_moon.pyc | File | 4.43 KB | 0644 |
|
| tdemo_planet_and_moon.pyo | File | 4.43 KB | 0644 |
|
| tdemo_tree.py | File | 1.38 KB | 0755 |
|
| tdemo_tree.pyc | File | 2.07 KB | 0644 |
|
| tdemo_tree.pyo | File | 2.07 KB | 0644 |
|
| tdemo_two_canvases.py | File | 1.09 KB | 0644 |
|
| tdemo_two_canvases.pyc | File | 1.6 KB | 0644 |
|
| tdemo_two_canvases.pyo | File | 1.6 KB | 0644 |
|
| tdemo_wikipedia.py | File | 1.32 KB | 0644 |
|
| tdemo_wikipedia.pyc | File | 1.91 KB | 0644 |
|
| tdemo_wikipedia.pyo | File | 1.91 KB | 0644 |
|
| tdemo_yinyang.py | File | 807 B | 0755 |
|
| tdemo_yinyang.pyc | File | 1.29 KB | 0644 |
|
| tdemo_yinyang.pyo | File | 1.29 KB | 0644 |
|
| turtle.cfg | File | 160 B | 0644 |
|
| turtleDemo.py | File | 9.85 KB | 0755 |
|
| turtleDemo.pyc | File | 10.69 KB | 0644 |
|
| turtleDemo.pyo | File | 10.69 KB | 0644 |
|