1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-11-27 06:27:17 +00:00

new tessellation samples

This commit is contained in:
Zeno Rogue 2020-06-06 01:10:03 +02:00
parent c05aa5d57a
commit 66b2b3277a
17 changed files with 335 additions and 0 deletions

1
tessellations/README.txt Normal file
View File

@ -0,0 +1 @@
go to https://github.com/zenorogue/tes-catalog for more!

View File

@ -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)")

View File

@ -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)

View File

@ -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)")

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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"

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)")

View File

@ -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)

View File

@ -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)