2x2 symmetric L-systems

2x2 symmetric L-systems

"Symmetry is a complexity-reducing concept; seek it everywhere." Alan Perlis

   The simplest 2x2 replacement systems with rules that are globally and locally symmetric.
   
    Many other types of systems also have a large number of symmetries, for example:

Two symbol systems

    There are only two symmetric 2-symbol 2x2 system that have a unique 2-D pattern (up to rotation and/or swap of symbols), the 2-D Thue-Morse system and a plain checkerboard.

[To Do: Representation of  TM and CB.]


Three symbol symmetric systems with two terminating rules

    A simple static system included for completeness. This system is not reccurent; while the first and last rules refer to themselves, they only refer to themselves and so leave the system's pattern the same. Equivalently, they can be replaced by a termination symbol.
Middle split algorithm graphic
Middle split by generation graphic
Middle split system pattern

    Note that the second (gray) rule is only visited once, at the 1st generation.

Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 3, 1, 0, '', 1, [0 0; 0 0], [0 2; 0 2], [2 2; 2 2] );
where [ng] is the number of generations.

 Diagonal split system
Diagonal split algorithm graphic
Diagonal split by generation graphic
Diagonal split system pattern Diagonal split scale symmetry

    This system can be considered as a simple tally number system, where each column is a set of 0's and 1's, numerically increasing from left to right. The gray symbol/rule would represent a generator that takes a number (the current column value), multiplies by two and adds 0 (n, null) and 1 to generate the next pair of columns, each with a single new generator. Starting with the generator g, the system generates all integers (a tally of contiguous 1's) with no duplicates:

g    ->  n  g  ->  n n   n g    ...
         g  1      n n   g 1
                   n g   1 1
                                      g 1   1 1            where each pair of columns is generated from a previous column,
_____________________________
0    
->  0  1  ->  0 1   2 3    ...   and the number of 1's represents an integer.
  
Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 3, 1, 0, '', 1, [0 0; 0 0], [0 1; 1 2], [2 2; 2 2] );
where [ng] is the number of generations.


Binary tally system
Binary tallly algorithm graphic
Binary tallly by generation graphic
Binary tally system pattern, link to 11th generation Binary tally scale symmetry graphic

    The pattern is a binary fractal -- the white and black regions are mirror image of each other, and the bottom two quadrants are both scaled copies of the whole.

    It is also a fractal tiling with a fractal (but finite boundary length) prototile.
    This system "grows" by adding a new periodic row of binary symbols [To Do: Show the 1-D periodic binary system.], at twice the spatial frequency (same phase at the left and right, an at the beginning of every even cycle) and half the height of the row above it.

    The system can be considered as a binay tally system, where each column is a set of binary elements, numerically increasing from left to right. The gray symbol/rule would represent a generator that takes a number (the current column value), multiplies by two and adds 0 (n, null) and 1 to generate the next pair of columns, each with a single new generator. Starting with the generator g, the system generates all integers (a tally of contiguous 1's) with no duplicates:

[To Do: Same style diagram as above, compare the systems.]

Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 3, 1, 0, '', 1, [0 0; 0 0], [0 2; 1 1], [2 2; 2 2] );
where [ng] is the number of generations.


Four symbol symmetric systems with two terminating rules

Reflected binary (gray code) system
Reflected binary (gray code) algorithm graphic
Reflected binary (gray code) by generation graphic
Reflected binary (gray code) system pattern

    Each row is a Thue-Morse sequence (with white and black as symbols) with symbols that double in size between rows. The number represented by each column (the number of white pixels, or the binary number encoded in the column's symbols) maps the column's index (0, 1, 2, 3, 4... from left to right) to the Gray code position of that column's index (0, 1, 3, 2, 7, ...).

     Another rendering of this basic pattern is found in Stephen Wolfram's "A New Kind of Science", page 83, figure b.

    The Gray code, also known as the reflected binary code, forms a Hamiltonian cycle on a hypercube where each bit represents one dimension

Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 4, 1, 0, '', 1, [0 0; 0 0], [0 3; 1 2], [3 0; 2 1], [3 3; 3 3] );
where [ng] is the number of generations.



Periodic alternating bits system
Periodic alternating bits algorithm graphic
Periodic alternating bits by generation graphic
Periodic alternating bits system pattern


Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 4, 1, 0, '', 1, [0 0; 0 0], [0 3; 2 2], [3 0; 1 1], [3 3; 3 3] );
where [ng] is the number of generations.


Periodic bits system
Periodic bits algorithm graphic
Periodic bits by generation graphic
Periodic bits system pattern


Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 4, 1, 0, '', 1, [0 0; 0 0], [2 0; 3 2], [0 1; 1 3], [3 3; 3 3] );
where [ng] is the number of generations.


Five symbol symmetric systems with two terminating rules


Binary tally to diagonal split system
Binary tally to diagonal split algorithm graphic
Binary tally to diagonal split by generation graphic
Binary tally to diagonal split system pattern, link to 11th generation Binary tally scale symmetry

    The pattern is also a binary fractal -- with the same scale symmetries as the binary tally system alone. Note that the diagonal split rules are seperable from (don't refer to) the binary tally rules.


[To Do: Finish description. Note that diagonal generators occur along diagonal boundaries as well as on bottom row -- show blow-up of a triangle top tip.] [To Do: What system has a 2:1 diagonal split, such that it could replace rules 1 and 3 to get continuous boundaries? I suspect it is 4-symbol, with 2 terminating rules. The binary tally to binary split system (below) achieves a 2:1 diagonal split along with a stepped boundary.]
[To Do: Diagonal split to binary tally system.]


Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 5, 1, 0, '', 2, [0 0; 0 0], [0 1; 1 4], [1 3; 2 2], [3 0; 4 3], [4 4; 4 4] );
where [ng] is the number of generations.


Binary tally to mirrored diagonal split system
Binary tally to mirrored diagonal split algorithm graphic
Binary tally to mirrored diagonal split by generation graphic
Binary tally to mirrored diagonal split system pattern, link to 11th generation Binary tally scale symmetry


Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 5, 1, 0, '', 2, [0 0; 0 0], [1 4; 0 1], [1 3; 2 2], [4 3; 3 0], [4 4; 4 4] );
where [ng] is the number of generations.


Binary tally to binary step system
Binary tally to binary step algorithm graphic
Binary tally to binary step by generation graphic
Binary tally to binary step system pattern, link to 11th generation Binary tally scale symmetry

    The pattern is also a binary fractal -- with the same global scale symmetries as the binary tally system alone. Note that the binary split rules (2nd and fourth rules) are seperable from (don't refer to) the binary tally rules. The binary split rule alone is not symmetric -- there is an imbalance of black/white in the top two quadrants -- but the pair have mirror-inversion symmetry.


[To Do: What system has a 2:1 diagonal split, such that it could replace rules 1 and 3 to get continuous boundaries? I suspect it is 4-symbol, with 2 terminating rules.]

Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 5, 1, 0, '', 2, [0 0; 0 0], [0 1; 0 4], [1 3; 2 2], [3 4; 4 3], [4 4; 4 4] );
where [ng] is the number of generations.


Diagonal split to binary tally system
Diagonal split to binary tally algorithm graphic
Diagonal split to binary tally by generation graphic
Diagonal split to binary tally system pattern, link to 11th generation Diagonal split to binary tally scale symmetry

    The pattern is also a binary fractal -- with the same global scale symmetries as the binary tally system alone. Note that the binary split rules (2nd and fourth rules) are seperable from (don't refer to) the binary tally rules. The binary split rule alone is not symmetric -- there is an imbalance of black/white in the top two quadrants -- but the pair have mirror-inversion symmetry.


[To Do: What system has a 2:1 diagonal split, such that it could replace rules 1 and 3 to get continuous boundaries? I suspect it is 4-symbol, with 2 terminating rules.]

Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 5, 1, 0, '', 2, [0 0; 0 0], [0 4; 1 1], [1 2; 2 3], [4 0; 3 3], [4 4; 4 4] );
where [ng] is the number of generations.


Diagonal split to rotated binary tally system
Diagonal split to rotated binary tally algorithm graphic
Diagonal split to rotated binary tally by generation graphic
Diagonal split to rotated binary tally system pattern, link to 11th generation Diagonal split to binary tally scale symmetry

    Same as Diagonal split to binary tally system (above) but with the second rule mirrored about the horizontal.

Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 5, 1, 0, '', 2, [0 0; 0 0], [1 1; 0 4], [1 2; 2 3], [4 0; 3 3], [4 4; 4 4] );
where [ng] is the number of generations.


Diagonal split to rotated mirrored binary tally system
Diagonal split to rotated mirrored binary tally algorithm graphic
Diagonal split to rotated mirrored binary tally by generation graphic
Diagonal split to rotated mirrored binary tally system pattern, link to 11th generation Diagonal split to binary tally scale symmetry

    Same as Diagonal split to binary tally system but with the second rule rotated about the horizontal.

Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 5, 1, 0, '', 2, [0 0; 0 0], [1 1; 4 0], [1 2; 2 3], [4 0; 3 3], [4 4; 4 4] );
where [ng] is the number of generations.


Seven symbol symmetric systems with two terminating rules


Binary tally to binary step to diagonal split system
Binary tally to binary step to diagonal split algorithm graphic
Binary tally to binary step to diagonal split by generation graphic
Binary tally to binary step to diagonal split system pattern, link to 11th generation Binary tally scale symmetry

    The pattern is also a binary fractal -- with the same global scale symmetries as the binary tally system alone.

Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 5, 1, 0, '', 2, [0 0; 0 0], [0 1; 0 4], [1 3; 2 2], [3 4; 0 4], [4 4; 4 4] );
where [ng] is the number of generations.



Square rotate 1 system
Square rotate 1 algorithm graphic
Square rotate 1 by generation graphic
Square rotate 1 system pattern, link to 11th generation  

[To Do: When the whole system has rotational symmetries, the base of the scale-symmetry diagram should show these symmetries, as well as intra-quadrant scale-symmetries. Modify L_system_tiling.m to generate this properly.]
Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 7, 1, 0, '', 1, [0 0; 0 0], [4 5; 3 2], [2 0; 6 4], [6 3; 5 0], [2 6; 0 4], [0 3; 5 6], [6 6; 6 6] );
where [ng] is the number of generations.




Square wave quarter-twist system
Square wave quarter-twist algorithm graphic
Square wave quarter-twist by generation graphic
Square wave quarter-twist system pattern, link to 11th generation Square wave quarter-twist scale symmetry graphic


Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 7, 1, 0, '', 1, [0 0; 0 0], [11 12; 10 9], [6 0; 12 0], [9 0; 0 0], [6 10; 6 0], [6 6; 6 11], [6 6; 6 6] );
where [ng] is the number of generations.



Square waves system
Square waves algorithm graphic
Square waves by generation graphic
Square waves system pattern, link to 11th generation Square waves scale symmetry graphic Square waves system pattern colored, link to 11th generation


Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 7, 1, 0, '', 1, [0 0; 0 0], [11 12; 10 9], [1 0; 12 0], [9 0; 0 0], [6 10; 6 1], [6 6; 6 11], [6 6; 6 6] );
where [ng] is the number of generations.



Square wave half-twist system
Square wave half-twist algorithm graphic
Square wave half-twist by generation graphic
Square wave half-twist system pattern, link to 11th generation Square wave half-twist scale symmetry graphic


Matlab command:
>> imOut = L_system_tiling( 'BF', [ng], 7, 1, 0, '', 1, [0 0; 0 0], [17 18; 16 19], [6 0; 18 0], [19 0; 0 0], [6 16; 6 0], [6 6; 6 17], [6 6; 6 6] );
where [ng] is the number of generations.


------------------------------------
There are no restrictions on use of the images on this page. Claiming to be the originator of the material, explicitly or implicitly, is bad
karma. A link (if appropriate), a note to dow[at]uoregon.edu, and credit are appreciated but not required.

Comments are welcome (dow[at]uoregon.edu).

Comments

Post new comment

Security question, designed to stop automated spam bots