diff options
Diffstat (limited to 'Demo/turtle/tdemo_penrose.py')
| -rw-r--r-- | Demo/turtle/tdemo_penrose.py | 181 |
1 files changed, 0 insertions, 181 deletions
diff --git a/Demo/turtle/tdemo_penrose.py b/Demo/turtle/tdemo_penrose.py deleted file mode 100644 index f816f66..0000000 --- a/Demo/turtle/tdemo_penrose.py +++ /dev/null @@ -1,181 +0,0 @@ -#!/usr/bin/python -""" 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() |
