diff --git a/tessellations/README.txt b/tessellations/README.txt new file mode 100644 index 00000000..2aadc94c --- /dev/null +++ b/tessellations/README.txt @@ -0,0 +1 @@ +go to https://github.com/zenorogue/tes-catalog for more! diff --git a/tessellations/affine/affine-fathauer-1-1-1.tes b/tessellations/affine/affine-fathauer-1-1-1.tes new file mode 100644 index 00000000..6b68b6c1 --- /dev/null +++ b/tessellations/affine/affine-fathauer-1-1-1.tes @@ -0,0 +1,7 @@ +## Fathauer triangle spiral, family 1, m=1, n=3 +a2. +angleunit(deg) +let(fi = (1+sqrt(5))/2) +let(one = test(1/fi + 1/fi^2)) +tile(1,36,fi,36,1/fi,180,1/fi^2,108) +conway("(0 2)(1 3)") diff --git a/tessellations/affine/affine-square.tes b/tessellations/affine/affine-square.tes new file mode 100644 index 00000000..c4168f33 --- /dev/null +++ b/tessellations/affine/affine-square.tes @@ -0,0 +1,7 @@ +## square grid with affine transformations +a2. +angleunit(deg) +tile(1,90,1,90,1,90,1,90) +conway("[0 2](1 3)") +# in the direction '0-2', stretch them by 1% and shear them by 50% (note that the direction is mirrored) +stretch_shear(1.5, 0.5, 0, 0) diff --git a/tessellations/affine/golden-spiral.tes b/tessellations/affine/golden-spiral.tes new file mode 100644 index 00000000..fd0e542e --- /dev/null +++ b/tessellations/affine/golden-spiral.tes @@ -0,0 +1,7 @@ +## Golden Spiral as an affine tessellation +a2. +angleunit(deg) +let(fi = (1+sqrt(5))/2) +let(one = test(1/fi + 1/fi^3 + 1/fi^4)) +tile(1,90,1,90,1,90,1/fi,180,1/fi^4,180,1/fi^3,90) +conway("(0 3)(1 4)(2 5)") diff --git a/tessellations/sample/brickwork.tes b/tessellations/sample/brickwork.tes new file mode 100644 index 00000000..e5ec5268 --- /dev/null +++ b/tessellations/sample/brickwork.tes @@ -0,0 +1,12 @@ +## brickwork +## a simple test +e2. +angleunit(deg) +# 1's are edge lengths, and 0s and 90s are external angles, given in angleunits (i.e. degrees) +tile(1,180,1,90,1,90,1,180,1,90,1,90) +# consecutive edges in 'tile' description are numbered: 0, 1, 2, 3, 4, 5 +# consecutive tile types are numbered: 0, 1, 2, ... (here there is just one type) +# the last 0 means that there is no mirroring +c(0,0,0,3,0) +c(0,1,0,4,0) +c(0,2,0,5,0) diff --git a/tessellations/sample/circlelimit3.tes b/tessellations/sample/circlelimit3.tes new file mode 100644 index 00000000..b70b0d30 --- /dev/null +++ b/tessellations/sample/circlelimit3.tes @@ -0,0 +1,54 @@ +## Escher's Circle Limit III +## Instructions: +## load this; +## load Escher's Circle Limit III in the texture mode; +## "scale/rotate the texture" until centers of octagons coincide with center of Escher's squares; +## you may "select master triangles" and pick triangles closer to the center; +## enable the texture + +h2. +angleunit(2*pi/3) +distunit(edge(8,3)) + +unittile(1,1,1,1,1,1,1,1) # YG +unittile(1,1,1,1,1,1,1,1) # YB +unittile(1,1,1,1,1,1,1,1) # YR +unittile(1,1,1,1,1,1,1,1) # RG +unittile(1,1,1,1,1,1,1,1) # RB +unittile(1,1,1,1,1,1,1,1) # GB + +c(0,0,3,1,0) +c(0,1,5,2,0) +c(0,2,1,3,0) +c(0,3,2,2,0) +c(1,0,5,1,0) +c(1,1,4,0,0) +c(1,2,2,3,0) +c(2,0,4,3,0) +c(2,1,3,2,0) +c(3,0,5,3,0) +c(3,3,4,2,0) +c(4,1,5,0,0) + +c(0,4,3,5,0) +c(0,5,5,6,0) +c(0,6,1,7,0) +c(0,7,2,6,0) +c(1,4,5,5,0) +c(1,5,4,4,0) +c(1,6,2,7,0) +c(2,4,4,7,0) +c(2,5,3,6,0) +c(3,4,5,7,0) +c(3,7,4,6,0) +c(4,5,5,4,0) + +# these lines repeat connections from (0123) to (4567), and also tell the texture mode that four triangles should be repeated twice +# (put them after specifying connections); however, it works better without them + +# repeat(0, 2) +# repeat(1, 2) +# repeat(2, 2) +# repeat(3, 2) +# repeat(4, 2) +# repeat(5, 2) diff --git a/tessellations/sample/circlelimit3b.tes b/tessellations/sample/circlelimit3b.tes new file mode 100644 index 00000000..af8ab968 --- /dev/null +++ b/tessellations/sample/circlelimit3b.tes @@ -0,0 +1,62 @@ +## Escher's Circle Limit III, mapped to {12,3} +## After mapping circlelimit3.tes, change the tes file to this one + +h2. +angleunit(2*pi/3) +distunit(edge(12,3)) + +unittile(1,1,1,1,1,1,1,1,1,1,1,1) # YG +unittile(1,1,1,1,1,1,1,1,1,1,1,1) # YB +unittile(1,1,1,1,1,1,1,1,1,1,1,1) # YR +unittile(1,1,1,1,1,1,1,1,1,1,1,1) # RG +unittile(1,1,1,1,1,1,1,1,1,1,1,1) # RB +unittile(1,1,1,1,1,1,1,1,1,1,1,1) # GB + +c(0,0,3,1,0) +c(0,1,5,2,0) +c(0,2,1,3,0) +c(0,3,2,2,0) +c(1,0,5,1,0) +c(1,1,4,0,0) +c(1,2,2,3,0) +c(2,0,4,3,0) +c(2,1,3,2,0) +c(3,0,5,3,0) +c(3,3,4,2,0) +c(4,1,5,0,0) + +c(0,4,3,5,0) +c(0,5,5,6,0) +c(0,6,1,7,0) +c(0,7,2,6,0) +c(1,4,5,5,0) +c(1,5,4,4,0) +c(1,6,2,7,0) +c(2,4,4,7,0) +c(2,5,3,6,0) +c(3,4,5,7,0) +c(3,7,4,6,0) +c(4,5,5,4,0) + +c(0,8,3,9,0) +c(0,9,5,10,0) +c(0,10,1,11,0) +c(0,11,2,10,0) +c(1,8,5,9,0) +c(1,9,4,8,0) +c(1,10,2,11,0) +c(2,8,4,11,0) +c(2,9,3,10,0) +c(3,8,5,11,0) +c(3,11,4,10,0) +c(4,9,5,8,0) + +# these lines repeat connections from (0123) to (4567), and also tell the texture mode that four triangles should be repeated twice +# (put them after specifying connections); however, it works better without them + +# repeat(0, 2) +# repeat(1, 2) +# repeat(2, 2) +# repeat(3, 2) +# repeat(4, 2) +# repeat(5, 2) diff --git a/tessellations/sample/circlelimit3c.tes b/tessellations/sample/circlelimit3c.tes new file mode 100644 index 00000000..d9512d6a --- /dev/null +++ b/tessellations/sample/circlelimit3c.tes @@ -0,0 +1,28 @@ +## Escher's Circle Limit III, mapped to sphere +## After mapping circlelimit3.tes, change the tes file to this one + +s2. +angleunit(2*pi/3) +distunit(1) +distunit(edge(4,3)) + +unittile(1,1,1,1) # YG +unittile(1,1,1,1) # YB +unittile(1,1,1,1) # YR +unittile(1,1,1,1) # RG +unittile(1,1,1,1) # RB +unittile(1,1,1,1) # GB + +c(0,0,3,1,0) +c(0,1,5,2,0) +c(0,2,1,3,0) +c(0,3,2,2,0) +c(1,0,5,1,0) +c(1,1,4,0,0) +c(1,2,2,3,0) +c(2,0,4,3,0) +c(2,1,3,2,0) +c(3,0,5,3,0) +c(3,3,4,2,0) +c(4,1,5,0,0) + diff --git a/tessellations/sample/floret.tes b/tessellations/sample/floret.tes new file mode 100644 index 00000000..8c14f8f6 --- /dev/null +++ b/tessellations/sample/floret.tes @@ -0,0 +1,9 @@ +## floret-like tiling +## from Marek14's post in HyperRogue discord +e2. +angleunit(deg) +tile(1,60,3,120,1,120,1,60,1,240,1,180,1,120) +c(0,0,0,6,0) +c(0,1,0,1,0) +c(0,2,0,5,0) +c(0,3,0,4,0) diff --git a/tessellations/sample/hexiamond.tes b/tessellations/sample/hexiamond.tes new file mode 100644 index 00000000..fffd8f35 --- /dev/null +++ b/tessellations/sample/hexiamond.tes @@ -0,0 +1,8 @@ +## {3,7} hexiamond +h2. +angleunit(2*pi/7) +distunit(edge(3,7)) +unittile(1,3,1,4,1,3,1,4) +conway("(0 1)(2 3)(4 5)(6 7)") +sublines(1) +# warning: this one is "nonorientable" diff --git a/tessellations/sample/hr-standard-tiling.tes b/tessellations/sample/hr-standard-tiling.tes new file mode 100644 index 00000000..44d56e0f --- /dev/null +++ b/tessellations/sample/hr-standard-tiling.tes @@ -0,0 +1,26 @@ +## HyperRogue standard tiling +h2. + +# we compute the edge length of the Archimedean tessellation we are using +distunit(arcmedge(6,6,7)) +# note: subsequent results of arcmedge are given in terms of distunit + +# regangle(A,B) returns the internal angle of a B-gon with sidelength A + +let(u6 = regangle(1, 6)) +let(u7 = regangle(1, 7)) + +unittile(u6,u6,u6,u6,u6,u6) +unittile(u7,u7,u7,u7,u7,u7,u7) + +c(0,0,0,0,0) +c(0,2,0,2,0) +c(0,4,0,4,0) +c(0,1,1,0,0) +c(0,3,1,1,0) +c(0,5,1,2,0) +c(0,1,1,3,0) +c(0,3,1,4,0) +c(0,5,1,5,0) +c(0,1,1,6,0) + diff --git a/tessellations/sample/marek313.tes b/tessellations/sample/marek313.tes new file mode 100644 index 00000000..3a3a6ee2 --- /dev/null +++ b/tessellations/sample/marek313.tes @@ -0,0 +1,11 @@ +## {3,13} pentiamond +## from Marek14's post in HyperRogue discord +h2. +angleunit(2*pi/13) +distunit(edge(3,13)) +tile(1,2,1,3,1,2,1,1,1,3,1,3,1,1) +c(0,0,0,6,0) +c(0,1,0,1,0) +c(0,2,0,2,0) +c(0,3,0,4,0) +c(0,5,0,5,0) diff --git a/tessellations/sample/marjorie-rice.tes b/tessellations/sample/marjorie-rice.tes new file mode 100644 index 00000000..10096df3 --- /dev/null +++ b/tessellations/sample/marjorie-rice.tes @@ -0,0 +1,28 @@ +## Marjorie Rice tiling +## see: "Marjorie Rice and the MAA tiling", Doris Schattschneider +e2. +angleunit(deg) +let(u=sqrt(3)/3) +tile(1, 150, u, 120, u, 90, 1, 120, 1, 60) +tile(1, 150, u, 120, u, 90, 1, 120, 1, 60) +tile(1, 150, u, 120, u, 90, 1, 120, 1, 60) + +#c(0,0,0,4,0) +#c(0,3,2,3,0) +#c(0,1,2,2,0) +#c(0,2,1,1,0) +#c(2,1,1,2,0) +#c(1,0,2,4,0) +#c(2,0,2,0,0) +#c(1,3,1,4,0) + +# in Conway notation, tile #k can be identified with k primes or with @k +conway("(0 4)(3 3'')(1 2'')(2 1')(1'' 2')(0' 4'')(0'')(3' 4')") + +# affect Vineyard/Zebra/Land of Power +line(0) +# heptagon role (affects e.g. Graveyard) +grave(1) + +# draw sublines in the grid, for every pair of vertices in distance of 1 distunit +sublines(1) diff --git a/tessellations/sample/sliders.tes b/tessellations/sample/sliders.tes new file mode 100644 index 00000000..9ff33b28 --- /dev/null +++ b/tessellations/sample/sliders.tes @@ -0,0 +1,20 @@ +## triangle alpha-beta-gamma, where alpha+beta+gamma = 120 degrees +## +## You can change alpha, beta, and gamma using 'tessellation sliders' in the geometry experiments menu. +## +h2. +angleunit(deg) + +slider(a,40,0,120) +slider(b,40,0,120) + +let(c = 120-a-b) + +let(ea=edge_angles(a,b,c)) +let(eb=edge_angles(b,c,a)) +let(ec=edge_angles(c,a,b)) + +tile(ea, b, ec, a, eb, c) +conway("(0)(1)(2)") + +cscale(.75) diff --git a/tessellations/sample/sliders2.tes b/tessellations/sample/sliders2.tes new file mode 100644 index 00000000..8d3fd09c --- /dev/null +++ b/tessellations/sample/sliders2.tes @@ -0,0 +1,21 @@ +## triangle alpha-beta-gamma, where alpha+beta+gamma = 120 degrees +## +## You can change alpha, beta, and gamma using 'tessellation sliders' in the geometry experiments menu. +## +## You can choose all three angles. Sliders are not allowed to change the structure of the map, +## so if they do not add up to 120 degrees, they will not match. +## +h2. +angleunit(deg) + +slider(a,40,0,120) +slider(b,40,0,120) +slider(c,40,0,120) + +let(ea=edge_angles(a,b,c)) +let(eb=edge_angles(b,c,a)) +let(ec=edge_angles(c,a,b)) + +tile(ea, b, ec, a, eb, c) +conway("(0)(1)(2)") + diff --git a/tessellations/sample/star.tes b/tessellations/sample/star.tes new file mode 100644 index 00000000..0e553c52 --- /dev/null +++ b/tessellations/sample/star.tes @@ -0,0 +1,22 @@ +## {4,6}, tromino 1S, solution 1 +s2. + +# we compute the edge length +#distunit(edge(5/2,3)) +#distunit(edge(5,5/2)) +distunit(edge(5/2,5)) + +# note: subsequent results of arcmedge are given in terms of distunit + +# regangle(A,B) returns the internal angle of a B-gon with sidelength A + + +#let(u5 = 2*pi/3) +#let(u5 = 4*pi/5) +let(u5 = 2*pi/5) + +unittile(u5,u5,u5,u5,u5) + +c(0,0,0,0,0) +c(0,1,0,3,0) +c(0,2,0,4,0) diff --git a/tessellations/sample/twothree.tes b/tessellations/sample/twothree.tes new file mode 100644 index 00000000..f4e8d37c --- /dev/null +++ b/tessellations/sample/twothree.tes @@ -0,0 +1,12 @@ +## two-three tiling +## from Marek14's post in HyperRogue discord +e2. +angleunit(deg) +tile(1,90,2,90,1,90,2,90) +tile(1,90,1,180,1,180,1,90,1,90,1,180,2,90) +c(0,3,0,3,0) +c(0,0,1,2,0) +c(0,1,1,6,0) +c(0,2,1,3,0) +c(1,0,1,1,0) +c(1,4,1,5,0)