An aperiodic tiling discovery
Much excitement last week with the publication by David Smith, Joseph Myers, Craig Kaplan and Chaim Goodman-Strauss of their discovery of a single tile which tiles aperiodically. Not only that but it does not need any supplementary rules, as Penrose's dart/kite pair do, to ensure aperiodicity. Christian Lawson-Perfect wrote about the story in aPeriodical. Later: There is now an excellent online talk by Craig and Chaim on the discovery and its proof hosted by the National Museum of Mathematics in New York.
The shape was discovered by David Smith, a hobbyist geometer. There is a wealth of research in David's blog, which starts with the declaration "I am not a mathematician but I do like shapes, interesting symmetry, polyhedra, tessellations and geometric patterns. " Skimming though it, one can see the deep exporation of shapes which makes his discovery seem almost inevitable. I plan to read more of his blog for inspiration. Well done ye, David!
The mathematical work of proving that the tile is aperiodic is a masterful exercise, clearly explained. A truly inspiring collaboration between a tinkerer, acedemic mathematicians and computer scientists.
OpenSCAD
Naturally I had a look at this with my OpenSCAD tiling tools.
tl:dr: A customizer on Thingiverse.allows both kinds of tiles in normal or mirror forms and all intermediate tiles to be printed or laser-cut.
I began by defining the perimeter as a sequence of sides each defined by side length and interior angle taken from the diagram, where we see up of 16 right triangular segments ( 8 kites) of adjacent hexagons. In this formulation, r is the long side of the triangle, a and b the other sides.
function hat_peri(r) =
// r is the radius of the base hexagon
// returns perimeter as a sequence of [side length,internal angle]
let (a = r * sin(60), b = r*cos(60) )
[[b,180],[b,120],[b,270],[a,120],[a,90],[b,120],[b,270],[a,120],
[a,90],[b,240],[b,90],[a,240],[a,90],[b,120]];
The first two sides form a straight line but for the purposes of tiling are distinct edges.
The perimeter is converted to a sequence of points using turtle-like geometry:
function peri_to_points(peri,pos=[0,0],dir=0,i=0) =
i == len(peri)
? [pos]
: let(side = peri[i])
let (distance = side[0])
let (newpos = pos + distance* [cos(dir), sin(dir)])
let (angle = side[1])
let (newdir = dir + (180 - angle))
concat([pos],peri_to_points(peri,newpos,newdir,i+1))
;
Tiling with this shape requires the use of the mirror image of the base tile:
function reverse(l) =
[for (i=[1:len(l)]) l[len(l)-i]];
function mirror_peri(q) =
let(p=reverse(q))
[for (i=[0:len(p)-1])
[p[ (i - 1 + len(p) ) %len(p)].x,p[i].y]
];
[This is a bit of a pity. Penrose's tiles are symmetric so the question doesnt arise but the search continues for a monotiling which does not require the use of reflections.]
My library of OpenSCAD functions supports the creation of tilings by defining a sequence of edge-to-edge placements. ATM this list is created manually. Each line specifies the alignment of one of the base tiles and edge to a tile and edge in the assembly.
hat_assembly_6 = [
[[0,0]]
,[[0,0],[0,1]]
,[[0,5],[0,2]]
,[[0,3],[0,4]]
,[[0,13],[0,6]]
,[[1,1],[0,9]]
,[[0,7],[0,12]]
];
module hat_tile_6(d) {
p = hat_peri (10,d);
t=peri_to_points(p);
m=peri_to_points(mirror(p));
unit=group_tiles([t,m],hat_assembly_6);
fill_tiles(unit,["red","green","blue","yellow","pink","black","coral"]);
}
Parametric tiles
More amazingly still, this tile turns out to be one of a family of aperiodic tiles, which in the limit are simple periodic tiles. They are beautifully animated here. The parametric perimeter description enables all members of this family to be constructed:
function hat_peri_family(r,d) =
// r is the radius of the base hexagon
// d is the angle which varies from 0 to 90
// returns perimeter as a sequence of [side,internal angle]
let (a = r * sin(d), b = r * cos(d) )
[[b,180],[b,120],[b,270],[a,120],[a,90],[b,120],[b,270],[a,120],
[a,90],[b,240],[b,90],[a,240],[a,90],[b,120]]);
At the limits , the tiles tesselate:
d=0 (nicknamed the comet)
d=45
d=90 (nicknamed the chevron)
All the tiles inbetween are aperiodic:
The Turtle
David also discovered a second tile he called the turtle. Defined as a perimeter, this also has 14 sides and is a family of tiles:
function turtle_peri(r,d) =
// r is the radius of the base hexagon
// returns perimeter as a sequence of [side,internal angle]
let (a = r * sin(d), b = r * cos(d) )
[[a,240],[a,90],[b,240],[b,90],[a,120],[a,180],[a,120],[a,270],[b,120],[b,90],[a,120],[a,270],[b,120],[b,90]];
d=60
The periodic endpoints d=0 and d=90 are the same as for the hat.
This is a small section of a tiling in David's blog:
No mirroed tiles in this example.
turtle_assembly_6 = [
[[0,0]]
,[[0,12],[0,13]]
,[[0,13],[0,2]]
,[[0,5],[0,6]]
,[[0,4],[0,7]]
,[[0,5],[0,10]]
,[[0,10],[0,11]]
];
To do
I'd like to add a couple of the suggested decorations.
A big task is to automate the tile placement to construct an assembly. Craig's software does this so I dont expect it to be easy! The approach I'd like to explore (perhaps it's the obvious appraoch?) is to start with the perimeter description of the base tile and extend this as each tile is added. The next tile can be placed by matching a subsequence of the tile perimeter to a subsequence of the expanding perimeter. Bit complicated to ensure that such a match will result in a fit especially with concave shapes.
Further
Veritasium has a nice youtube on the background to aperiodic tiling
Jaap Scherphuis created the PolyForm Puzzle software which was used by David in his explorations.
7 notes
·
View notes