Triangular tiling

From LifeWiki
Jump to navigation Jump to search

The triangular tiling, triangular grid, triangular tessellation or triangular lattice (Schläfli symbol {3,6}) is one of the three possible regular tilings of the plane, alongside the square tiling and hexagonal tiling. It is constructed with six triangles being placed at each vertex.

Of the three regular 2D tilings, it is by far the least investigated, with very little native software support. Native support for triangular rules is offered by some general-purpose cellular automaton simulation programs, although said support is seldom without flaw.

Coordinates, directions and displacements

While Cartesian coordinates can be used to describe the positions of triangles, this does not preserve symmetry well, as it effectively treats the triangular tiling as a square tiling and fails to consider its unique symmetries. While there exist many coordinate systems which can be used to describe the coordinates of triangles in a symmetrical way, such as cube coordinates, none seem to be in use in cellular automaton simulation programs.

Orthogonal and diagonal directions

While the existence of distinct orthogonal and diagonal directions on a triangular grid is not immediately as obvious as on a square grid, they are distinct and have been defined.[1] By analogy to the hexagonal grid, if we consider a vertex of the triangular grid, the six edges radiating out from the vertex are considered as pointing in the six orthogonal directions, whereas the six rays directly between these (passing through cell centers) are considered to be the six diagonal directions.

Neighbourhoods on the triangular tiling

For what is considered to be a range of 1, the triangular tiling has the greatest diversity of neighbourhoods: there are effectively three types of cells adjacent to the central cell, giving a total of seven unique neighbourhoods (excluding the null case). These are listed on the Triangular neighbourhood page. However, the six-cell "outer" neighbourhood is effectively trivial, as it emulates two non-interacting hexagonal grids.[2] The "radiation" neighbourhood similarly splits the grid into four non-interacting grids which can be described with the simpler "edges" neighbourhood.

von
Neumann
outer
(trivial)
biohazard radiation
(trivial)
inner vertices Moore

For higher ranges, only the 12-cell "triangular Moore" neighbourhood is usually considered.

Range \ Type triangular Moore
1
2
3

Symmetries

All of the static and kinetic symmetries which are present on the triangular tiling also apply to the hexagonal tiling.

The ratio of a pattern's mod to its period, for rules on these grids, can only be 1, 2, 3 or 6.

Static

Isotropic rules on the triangular tiling will always confirm to one of 14 different static symmetries. Its sixfold rotational and reflectional symmetry permits asymmetry, twofold cyclic symmetry, threefold cyclic symmetry, sixfold cyclic symmetry, twofold mirror symmetry, fourfold mirror symmetry, sixfold mirror symmetry and twelvefold mirror symmetry, with further variants depending on the positioning of the center of rotation or the positioning and/or rotation of the planes of reflection.

Asymmetry Rotational symmetries
Onefold Twofold Threefold Sixfold
Cell-centered Edge-centered Cell-centered Vertex-centered
C1 C2_1 C2_4 C3_1 C3_3 C6
Reflectional symmetries Rotational and reflectional symmetries
Twofold Fourfold Sixfold Twelvefold
Orthogonal Diagonal Vertex-centered Edge-centered Vertex-centered Cell-centered
Orthogonal Diagonal
D2_xo D2_x D4_x1 D4_x4 D6_1o D6_1 D6_3 D12

Kinetic

In addition to these 14 static symmetries, periodic patterns can also conform to one of 35 possible distinct kinetic symmetries. 14 of these duplicate the static symmetries above, with the other 21 arising for periodic patterns which have a mod unequal to their period.

"Composite symmetry" refers to the resulting symmetry of the pattern created from each of the oscillator's phases.

Unlike the square grid kinetic symmetries, shorthand names for these do not appear to have been invented so far, though a set has been proposed.

Static symmetry Composite symmetry period/mod Description Gutteroids
C1 D2_xo 2 Pattern is asymmetric
Appears flipped across an orthogonal line during (period/2)
Line passes through vertices and edges
none
C1 D2_x 2 Pattern is asymmetric
Appears flipped across a diagonal line during (period/2)
Line passes through vertices, cell centers and edge midpoints
1 diagonal
p/2
C1 C2_1 2 Pattern is asymmetric
Appears rotated 180 degrees during (period/2)
Rotation is centered on a vertex
none
C1 C2_4 2 Pattern is asymmetric
Appears rotated 180 degrees during (period/2)
Rotation is centered on an edge
none
C1 C3_1 3 Pattern is asymmetric
Appears rotated 120 degrees during (period/3)
Rotation is centered on a vertex
none
C1 C3_3 3 Pattern is asymmetric
Appears rotated 120 degrees during (period/3)
Rotation is centered on a cell
central cell
p/3
C1 C6 6 Pattern is asymmetric
Appears rotated 60 degrees during (period/6)
Rotation is centered on a vertex
none
D2_xo D4_x1 2 Pattern has D2_xo symmetry
Appears flipped across a diagonal line during (period/2)
Lines intersect at a vertex
1 diagonal
p/2
D2_xo D4_x4 2 Pattern has D2_xo symmetry
Appears flipped across a diagonal line during (period/2)
Lines intersect at the center of an edge
1 diagonal
p/2
D2_x D4_x1 2 Pattern has D2_x symmetry
Appears flipped across an orthogonal line during (period/2)
Lines intersect at a vertex
none
D2_x D4_x4 2 Pattern has D2_x symmetry
Appears flipped across an orthogonal line during (period/2)
Lines intersect at the center of an edge
none
C2_1 D4_x1 2 Pattern has C2_1 symmetry
Appears flipped across both a diagonal and orthogonal line during (period/2)
Lines intersect at a vertex
1 diagonal
p/2
C2_1 C6 3 Pattern has C2_1 symmetry
Appears rotated 60 degrees during (period/3)
Rotation is centered on a vertex
none
C2_4 D4_x4 2 Pattern has C2_4 symmetry
Appears flipped across both a diagonal and orthogonal line during (period/2)
Lines intersect at the center of an edge
1 diagonal
p/2
C3_1 D6_1o 2 Pattern has C3_1 symmetry
Appears flipped across one of three orthogonal lines during (period/2)
Lines intersect at a vertex
none
C3_1 D6_1 2 Pattern has C3_1 symmetry
Appears flipped across one of three diagonal lines during (period/2)
Lines intersect at a vertex
3 diagonals
p/2
C3_1 C6 2 Pattern has C3_1 symmetry
Appears rotated 60 degrees during (period/2)
Rotation is centered on a vertex
none
C3_3 D6_3 2 Pattern has C3_3 symmetry
Appears flipped across one of three diagonal lines during (period/2)
Lines intersect at the center of a cell
3 diagonals
p/2
D6_1o D12 2 Pattern has D6_1o symmetry
Appears rotated 60 degrees during (period/2)
Could also be interpreted as flipping on one of three diagonal lines
Rotation is centered on/lines intersect at a vertex
3 diagonals
p/2
D6_1 D12 2 Pattern has D6_1 symmetry
Appears rotated 60 degrees during (period/2)
Could also be interpreted as flipping on one of three orthogonal lines
Rotation is centered on/lines intersect at a vertex
none
C6 D12 2 Pattern has C6 symmetry
Appears flipped across one of three diagonal lines and
and one of three orthogonal lines during (period/2)
Lines intersect at a vertex
3 diagonals
p/2

Emulation on a square grid

As almost all known cellular automata simulation programs use a square grid and Cartesian coordinates, the triangular neighbourhood does not arise naturally like the von Neumann and Moore neighbourhoods do. As such, simulating triangular rules demands that the triangular grid be "emulated" on the square grid.

Since triangles, unlike squares and hexagons, do not tesselate the plane through translation only, there are essentially two "orientations" of triangle present on the grid, dividing said grid into a "checkerboard" of sorts. These will use different neighbourhoods: one in a given orientation, and another in the same orientation, but flipped or rotated such that the central triangle points in the opposite direction.

Emulated triangular Moore neighbourhood True triangular Moore neighbourhood

Software support

Support for triangular grids is uncommon in most cellular automaton simulation programs, especially those that are not purpose-built. Editing tools often operate under the assumption that the square grid is still in use, resulting in rotation, flipping and even translation of selected regions not working faithfully to the triangular grid itself.

Making the grid appear triangular

Golly can run a small subset of triangular rules using RuleLoader using a multistate method that splits one square cell into two triangular cells. With icons enabled, these triangles, through distorted from regular equilateral triangles, become visually apparent. Native support for 2-state rules and Generations extensions thereof is also provided in the "Larger than Life" algorithm, however there is no visual aid provided for this case. Unlike hexagonal rules, which can be run on hexgrid.lua, there is no such script for triangular rules.

LifeViewer renders the entire grid as a triangular grid when a triangular rule is in use. This is the default setting for triangular rules; it is also possible to switch to a "rectanglee" grid in which each cell is rendered as a tall rectangle. The rectangle grid is also used at zoom levels below 4.0, and is less computationally expensive to draw than triangles. There are certain visual effects which are not available for triangular grids nor hexagonal grids:

  • Camera rotation (support is planned for a future build)[3]
  • Layers and depth[4]
  • Tilt[5]

Major grid lines are not supported for the triangular grid nor the rectangle grid.

Triangular pattern editing

Pattern editing, being square-grid-based, does not translate perfectly to triangles, as they only share 180-degree rotation. Flipping of selections, while it would be expected to be possible on both grids due to them sharing symmetries, is also complicated by the usual emulation method, as this would not always be valid if centered on a triangular cell due to not having mirror symmetry in two perpendicular directions. While not explicitly forbidden, operations such as 90-degree rotations effectively scramble patterns into something different rather than rotate them in a useful way.

Square selections made on a square grid are functionally rectangular on a hexagonal grid. LifeViewer makes this very clear visually, as it does not support selection shapes more suited to a triangular grid (although is planned to)[3][6][7] and as such a rectangle shape can be clearly seen when making selections.

As of March 2025, neither Golly nor LifeViewer fully support the following editing features:

  • Selections
    • Still operate on a square grid, making them functionally (and in LifeViewer's case, visually) rectangular
    • Support for selection shapes which make more sense for triangular grids is planned for LifeViewer[3][6][7]
  • Selection flipping
    • Assumes a square grid rather than acknowledging the emulated triangular grid
    • Also assumes there are only two orthogonal planes to flip across, rather than three
    • Support for better selection flipping is planned for LifeViewer[6]
  • Selection rotation
    • Assumes a square grid rather than acknowledging the emulated triangular grid
    • 90-degree rotations (CW, CCW) are allowed, despite these rotations being impossible on triangular grids
    • There are no options for 60-degree and 120-degree rotations (CW, CCW)
    • Support for better selection rotation is planned for LifeViewer[6]

Bounded grids

A regular hexagon composed of smaller triangles can tile the grid purely through translation, permitting toroidal bounded grids at the very least.

As all known programs only use rectangular bounded grids so far, the characteristics remain unknown.

Coordinates, displacement notation and static and kinetic symmetries

While square-grid Cartesian coordinates can be used for the triangular grid, they are not ideal due to breaking the lower degree of symmetry triangles have. A system similar to the "cube coordinates" system used for hexagonal girds can be applied to triangular grids, where the sum of the coordinates indicates a triangle's orientation.[8] However, no program appears to support such a coordinate system.

The detection and display of spaceship directions for triangular grids is planned for LifeViewer's Identify functionality at some point.[9] Square-based displacement results are still displayed, however.

As is described earlier, an oscillator can have a mod equal to its period, or equal to one half, third or sixth of its period. A spaceship can have a mod equal to its period or equal to half of it. LifeViewer does not attempt to calculate mod, although this is also planned.[7]

Custom higher-range neighbourhoods can be defined in Golly and LifeViewer using the CoordCA system. However, this is still based on subsets of the range-n square-grid Moore neighbourhood. It is unclear if a triangular-grid specific system should be devised, or even worth implementing if it is. Note that triangular rules will invert this neighbourhood depending on which checkerboard a cell exists on.

Custom rules

Unlike square-grid and hexagonal-grid neighbourhoods, the RuleLoader format does not support triangular neighbourhoods, and therefore custom triangular rules cannot be created. The Rule Table Reposotiry roadmap includes triangularMoore and triangularvonNeumann as potential future neighbourhood types,[10] however neither Golly nor LifeViewer support these.[11]

See also

References

Further reading

Forum threads
Other