# Penrose tilings with Sage

I would like to make a poster from a Penrose tiling. Google didn't give me any Sage code for doing this, but I wonder if someone here knows of such a thing!

Penrose tilings with Sage

4

```
# Adapted from http://preshing.com/20110831/penrose-tiling-explained
golden_ratio = (1 + sqrt(5))/2
def subdivide(triangles):
result = []
for color, A, B, C in triangles:
if color == 0:
# Subdivide red triangle
P = A + (B - A) / golden_ratio
result += [(0, C, P, B), (1, P, C, A)]
else:
# Subdivide blue triangle
Q = B + (A - B) / golden_ratio
R = B + (C - B) / golden_ratio
result += [(1, R, C, A), (1, Q, R, B), (0, R, Q, A)]
return result
# Create wheel of red triangles around the origin
triangles = []
for i in xrange(10):
B = exp((2*i - 1)*pi/10*I)
C = exp((2*i + 1)*pi/10*I)
if i % 2 == 0:
B, C = C, B # Make sure to mirror every second triangle
triangles.append((0, 0, B, C))
# Draw n iterates
n = 5
for i in range(n):
P = Graphics()
for verts in triangles:
#P += polygon([(z.real(), z.imag()) for z in verts[1:]], color=['red', 'blue'][verts[0]])
P += line([(z.real(), z.imag()) for z in (verts[3], verts[1], verts[2])], color='black', thickness=2)
P.show(axes=False, aspect_ratio=1)
triangles = subdivide(triangles)
```

Nice code ! Actually, the code is much faster if you replace the symbolic constants (sqrt(5) and the exponential) by real numbers.

Thanks! I updated the code to allow various coloring schemes, draw circular sectors on the tiles, and output the graphics object so that differing levels of iteration can be overlaid: http://www.nilesjohnson.net/aperiodic-tilings.html

Asked: **
2012-10-22 09:42:41 -0600
**

Seen: **786 times**

Last updated: **Mar 23 '13**

how to plot a circle (without circle())

show all view with same x size of Hanoi's Towers

automatic zordering with plots

Embedding R graphics device in Sage notebook

Showing a Graphic3d object [closed]

display matplotlib graphic in Sage cell server

Can I convert a GraphicsArray object to a Graphics object?

Normalized coordinates for plots/graphics?

How to see graph directly after plot() via virtualbox?

Does there exist a GUI web-app that allows for edge contractions and vertex splits?

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.

You could try http://preshing.com/20110831/penrose-tiling-explained. An internet search for "penrose tiling algorithm" seems likely to be fruitful.

Well, yes. I was hoping for some enterprising person to turn the explanation into code for me! ;) And in fact I'd like code which lets me color the tiling in some enlightening way.

What would the input be to such desired code?

Inputs would be size of the output image, and maybe some options for how the picture is colored (highlight symmetry, or highlight method of construction, perhaps).

Sorry, I meant how is the Penrose tiling represented?