2

Suppose I have a rhombus based penrose tiling like the following:

Tiling

Is there some coordinate system that allows me to easily uniquely refer to a specific tile, and also from the coordinates efficiently calculate the coordinates of the tiles that border it?

I also need to be able to easily tell what tile is on the "opposite side" edge of a tile with respect to a different tile that also borders it.

Basically my end goal is, if I have some instruction like "Straight, Straight, Left, Straight, Right" and follow them on the grid to calculate if I ever cross my own path and when.

mousetail
  • 131
  • 1
    It depends on your notion of 'easily'. Penrose tilings are substitution tilings as well as cut-and-project tilings, and both of these setups will allow you to encode an 'address' for each tile. For the substitution approach, I would recommend searching for 'Bratteli diagrams' and substitution tilings, as it's a common construction. For the cut-and-project method, I'm not sure of a particular reference, and it's possible that things get messy... – Dan Rust Sep 11 '23 at 08:07
  • @DanRust I have no problem implementing a complex algorithm as long as I can understand what it needs to do. I'm looking into Bratteli diagrams but I'm unsure how they would let me find the tiles adjacent to a given address – mousetail Sep 11 '23 at 08:59
  • 1
    It's easiest to describe in 1 dimension, where translation to the right corresponds to just taking the successor path in the corresponding ordered Bratteli diagram. In 2d, you need to order your tiles in a substituted patch in some (necessarily arbitrary) way. There will then be a finite set of checks to do to tell if two tiles are adjacent in terms of their corresponding paths in the diagram, where the most complicated checks are when two tiles are adjacent at the boundaries of two large supertiles. Then you need to go down to the $k$th level of the diagram in order to perform the check. – Dan Rust Sep 11 '23 at 09:06
  • @DanRust Ah ok so that method would allow me to check if two tiles are adjacent but to list all the adjacent tiles I'd need to just try every tile one by one until I find exactly 4 tiles. – mousetail Sep 11 '23 at 09:21
  • No I don't think it's quite that intensive if you're clever about it. I would start with a simple example like a square substitution first to hopefully get some intuition for it, and then move onto the Penrose substitution after that. – Dan Rust Sep 11 '23 at 09:30

1 Answers1

1

I think I found a functional system. First we give each tile a letter, A to E:

enter image description here

Now we can refer to any position by specifying which tile it is, then the tile of the parent, then the tile of the parents parent etc.

However, we can't actually store infinite coordinates, so we follow a pattern. I choose the pattern CEDBAA repeating forever but many other combinations will work. Now if I have a coordinate like A it actually means AEDBAACEDBAACEDBAA... where I only override the beginning of the basic shared pattern with the new coordinate.

Calculating what moving in a specific direction would look like

Now all we need is rules to cover how to traverse the grid. Each tile has 4 sides, North, East, South, and West, where north is represented by the left indentation. Now all we need to define for each side of every tile type where you would end up if you go that way. Some examples:

  • If you go North from tile B, you end up coming in from the north side of the tile in the A position sharing the same parent tile.
  • If you go East from tile B, you will leave the parent tile on the east side, specifically on the left half of the right half of that edge.

There are 20 such rules plus 10 more for what happens if you enter one of the large tiles from a specific edge, half edge, or quarter edge. You can find the full list of rules here

When leaving the parent tile, repeat the process for the parent's parent, and the parent's parent parent, until you reach an instruction that allows you to enter a tile, at which point you use the matching rule for what happens when entering a tile from a specific edge until you reach a physical, first level tile again.

In some rare cases entering a tile form a specific angle connects directly back outwards. For example entering the thin rhomb from the south (bottom right) immediately connects back out to the right half of the top. This rhomb is guaranteed to be filled by a thick rhomb from the tile that connects to the east edge. In this case the algorithm will transition from a inwards motion to an outwards motion again.

Some resources that where incredibly helpful working this out: https://tilings.math.uni-bielefeld.de/substitution/penrose-rhomb/ and https://en.wikipedia.org/wiki/Penrose_tiling

mousetail
  • 131