Mark Dow

Geek art

Simple recursive systems and fractal patterns

Space-filling curve L-systems    

    Several examples of block replacement L-systems that have fixed points that are space-filling curves.

    What distinguishes systems that result in space-filling curves? Given a space-filling curve defined in some other way, can it, and how can it, be generated with a block replacement L-system? How many unique space filling curves with very short descriptions exist?

Spiral space-filling system pattern, link to Anti-symmetric spiral space-filling system, link to Spiral space-filling system average pattern, link to Hilbert curves Hilbert curvesHilbert curves Hilbert variant curves Peano curves Peano curves Peano curves Peano curves Sierpinski curves Sierpinski curves circuit

About space-filling curves
Constructing space-filling block replacement L-systems
Complete traversals of a lattice

2x2 two-symbol systems
Hilbert curves
[To Do: list]
Hilbert variant curves
Sierpiński curves
Sierpiński curve circuit
Sierpiński curve complement circuit
Bar bar cross system

                                        2x2 five-symbol systems
3x3 two-symbol systems

Peano curves
[To Do: list]
Spiral space-filling system
Progressive spiral space-filling system
Double S spiral space-filling system
Double F spiral space-filling system
Anti-symmetric spiral space-filling system

[To Do: R-Tree, rotated bars, Z traversal, more complex traversals.]

References



About space-filling curves

    What continuous and nowhere differentiable curves pass through every point of a region of space, without crossing? How can space-filling curves be specified and constructed? For a given lattice, how many such curves exist? What about curves that include differentiable and non-differentiable segments?

        Space-filling curves are deceptively simple. While many are described by very short recursive algorithms, and their representations are highly redundant (through space and across scales), the number and form of the system elements are not obvious from looking at the curve elements. How many unique segments, and rotations and mirrors of segments, are required to form one of these curves? What is the arrangement, or pattern, of each the segments?

    Many space-filling curves can be described with string-rewriting systems, where the symbols (alphabet) represent line segments and turn directions. They can then be visualized as prototypical curves, whose elements (segments and turns) are recursively replaced by scaled copies of themselves. [To Do: Illustrate a turtle graphics string rewriting system.]

Hilbert curve by generation graphic Hilbert curve by generation graphic Hilbert curve by generation graphic Hilbert curve by generation graphic
A representation of the first four generations of the Hilbert curve.
Spiral space-filling by generation graphic
The first three generations of a Peano curve construction. [To Do: Match style with Hilbert.]


    These visual representations imply replacement systems, but the replacement elements and rules are not explicit. For example, it is not clear what elements, how many unique replacements, or the orientations of replacement elements. There are several ways to arrange the Peano "S" at each of 3x3 locations at the second iteration, but some doodling is required to decide which arrangements are possible. [To Do: Illustrate with 3x3 block background, centers, and underdetermined tails.]

    These and other space-filling curves can also be described by block replacement L-systems on a 2x2 or larger square lattices. Other regular lattices (triangular, hexagonal) also support space-filling systems and can be described by the same systems.

    Below is a representation of the Hilbert curve evolution that depicts a block replacement system explicitly. Two symbols, each represented by a square motif with a blue or red segment, and two replacement rules are needed. The rules can be inferred from the two left-most generations of both systems (or the first three generations of either system) -- each of two motifs (blue and red) is replaced by a particular 2x2 composite arrary of the two motifs. These rules are applied uniformly in the mapping from every generation to the next. The resulting ordering of both symbols, a fixed point of the morphism, is non-periodic both along the curve or on the plane. In the infinite limit this ordering is identical for both systems -- only a single symbol, at the bottom right corner, is different at any generation.

Hilbert curve algorithm graphic Hilbert curve by generation graphic Hilbert curve by generation graphic Hilbert curve by generation graphic Hilbert curve by generation graphic


Hilbert curve algorithm graphic Hilbert curve by generation graphic Hilbert curve by generation graphic Hilbert curve by generation graphic Hilbert curve by generation graphic
Another representation of the first four generations of the Hilbert curve.

 
    Here are a few curves that result from this type of system, colored by contiguous region on the two sides of each curve:
Hilbert curve pattern, 5th generation, link to 8th generation
A 2-symbol 2x2 Hilbert curve, with the two regions colored.

Hilbert curve pattern, 5th generation, link to 8th generation
A 2-symbol 2x2 Hilbert variant curve
space-filling system pattern, 3rd generation, link to 7th
A 5-symbol 2x2 Z 4-U space-filling system.


Bar Bar 2-s curve pattern, 5th generation, link to 8th generation

Bar Bar 2-s curve pattern, 5th generation, link to 8th generation
Bar Bar 4-s curve pattern, 5th generation, link to 8th generation
[To Do: Nested curves that fill space.] [To Do: Space-filling on a torus..]

Constructing space-filling block replacement L-systems


     While space-filling curves can be generated using turtle graphics operating on string replacement systems, using block replacement L-systems has some advantages:

A block is a nice representation framework for designing motifs, and blocks can be directly represented by motifs. [To Do: Example.] The regions that a curve divides can be explicitly represented by the motifs and system.

The range of possible space-filling curves can be circumbscribed. For 2x2 square replacement systems all such curves can be enumerated. How many are there?

It is not difficult to design new curves with given constraints (on some lattices, with some neighborhood relationships, with a global traversal pattern), or to show that such a curve can't be constructed.

Reverse engineering a given curve, finding the elements and rules, can be a bit easier.

    As with a turtle graphics description, the block replacement description can be minimal -- the shortest possible description given the allowed operation. With block replacement systems it is a bit easier to recognize when a system is no minimal. It is also easier to answer some other questions about the system, such as the patterns encountered in one-dimensional transects of a curve.

Complete traversals of a lattice


    The generating rules (axioms) for space-filling curves can be found by considering complete lattice traversals, where traversals are defined by mutual replacement.

    Here's a recipe for finding space-filling curves on some lattice geometries:

First, pick a lattice geometry that can be defined by a replacement system.
Non-square replacement lattices (similarity tilings)
Second, list all traversals of the replacement lattice element(s).
Third, find a complete set of traversals --  a set composed of only traversals (or their rotations and mirrors) that appear in the complete set.
Fourth, check these sets for self-intersection at edges.


    First, pick a lattice geometry that can be defined by a replacement system.  Most of the examples on this page are on a square lattice with 2x2 or 3x3 lattice replacements. The lattice can be defined by replacement of a lattice point, represented by a square, with an n x m set of points, represented by an n x m array of squares. 

2x2 replacement system

A system that results in a 2nx2n lattice after n iterations.

       2x2 replacement system      

The same, but
represented as lattice
point replacement
2x2 replacement lattice, after 2nd iteration

Lattice after second iteration.

3x3 replacement system

A system that results in a 3nx3n lattice after n generations.

       [2x2 replacement system
To Do: Same diagram but 3x3;]      


Other replacement lattices (similarity tilings)


    Second, list all traversals of the replacement lattice element(s). By complete traversal, I mean a curve having an entrance and exit point, visiting each lattice point (passes into each square of the grid representation) exactly once, and doesn't cross (or touch) itself.

    There are two unique orderings (I call these U and Z orderings] and [21?] unique traversals of a 2x2 lattice:

2x2 traversal 2x2 traversal

    Here are examples of each of [24?] unique 2x2 traversals up to rotation and mirroring, in no particular order. Above them are traversal symbols that represent the entrance and exit points and symmetry of the traversal, with the convention that this traversal symbol (or motif) can be replaced by any 2x2 complete traversal that enters and exits at the same relative locations. These are single traversals, but double traversals can also be used to form space-filling curves, for example Sierpinski curves.


2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal







2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
 
Other 2x2 traversals


    Third, find a complete set of traversals. Every member of a complete set is composed of only traversals (or their rotations and mirrors) that appear in the complete set.

Example of complete sets of a single 2x2 traversals:

2x2 traversal motif

2x2 traversal
    This case appears to be unique, a traversal constructed from only self-replacement. It fails as a space-filling curve in the next step, in that it is self-intersecting. [To Do: Diagram.]

    Note that the order of the traversal is identical with the Hilbert system. If the self-intersections are "fixed", by avoiding the corner with entrance points that are arbitrarily close to the corners, the result will be the two symbol Hilbert system.

Examples of complete sets of two 2x2 traversals:

2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal

2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
Hilbert system Hilbert variant system
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal

2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal



2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal



    Are there more such pairs? [To Do: Yes.] Traversals that use two symbols that don't include their own symbol [example] can't be a member of such a pair. This narrows the list considerably. Also, the pairs must share the property of  "only corner to corner", "only side to side centered, or "only side to side off-center" [graphic list, caveats]


Examples of complete sets of three 2x2 traversals:

2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal


2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal

2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal

2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal









2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal

2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal

2x2 traversal motif

2x2 traversal











    [To Do: Finish.]
 
    There's a surprising lack of variety in this list of triplets. I woud have guessed on combinatorial principles that there would be a steep increase in the number of triplets, because many more combinations of symbols can plausibly be used to construct traversals. Are there a large number of triplets I missed in this list? 


Examples of complete sets of four 2x2 traversals:


2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal

2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal




















2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal


2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal

Milbert curve traversal set


2x2 traversal 2x2 traversal 2x2 traversal 2x2 traversal









2x2 traversal motif 2x2 traversal motif 2x2 traversal motif 2x2 traversal motif








This system doesn't work due to self-intersection. Many variations (using different traversals with the same enter and exit points) also didn't work.

L_system_tiling( 'test', 5, 4, 1, 0, 'trav_22sc_22ac_21o_21a_rgbv_motif.png', 0, [103 22; 2 123], [22 11; 2 10], [103 10; 2 21], [103 3; 2 2] );
[To Do: Finish.]  


Examples of complete sets of five 2x2 traversals:

    This is the only unique five complete set that I've found that forms a space-filling curve, the Z 4-U space-filling system. It's a good bet that there are others.
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal

This system has no traversal that touches an edge between the endpoints, so it can't have self-intersections. I found it by fixing self-intersections of a two element complete set of traversals (at right).

2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal

Examples of complete sets of two 3x3 traversals:

[To Do Peano traversal.]

3x3 traversal motif

3x3 traversal
3x3 traversal motif

3x3 traversal

3x3 traversal motif

3x3 traversal
3x3 traversal motif

3x3 traversal


    Fourth, check these sets for self-intersection at edges. [To Do: Some sets don't have tangents to the edge, so it is guaranteed that any combinations won't intersect. But several 2-symbol systems do intersect the edge, and when they are replaced, intersect an adjacent replacement.]

    The single instance of a 2x2 lattice traversed by a single symbol results in a curve that has points that touch (self-intersect without crossing). I use "touch" and "touch point" because these curves are everywhere discontinuous in the infinite limit, so a description like "tangential intersection" is not appropriate, as a derivative is not available to define a tangent line.
2x2 traversal motif

2x2 traversal
2x2 traversal 2x2 traversal

    In this case the first touch point is evident in the second generation of replacement, and the number of touch points rises with each new generation. [ To Do: How fast? 8 at the third, 40 at the fourth. fifth? 0,1,8,40,176,736...? OEIS A165665. pn = 4*pn-1 + [0,0,1],[1,1,2],[2,2,4],[4,4,8] = 4*pn-1 + 2^(n-1)? Add this recursion formula to OEIS A165665, a(n) = (3*2n-1-2)*2n-1, n>=1, a(0) = 0. ]

    These systems that include touch points are interesting for many of the same reasons that true (non-intersecting) space-filling curves: they are everywhere discontinuous and they visit every point on a lattice with a well defined ordering.  But because they touch, the curve divides the plane into more that two regions. The way the plane is dissected depends on the motif. More touch points can be introduced [To Do: "High" triangle example.]

Fixing self-intersections

    Representing the system with this motif gives the impression that the curve "overvisits" a decreasingly small fraction of the points on a plane, at the touch points. But if only the ordering of lattice points is considered, ignoring the motif which represents a single traversal, then this system is identical to a Hilbert curve. So, for example, if after each generation the motifs were altered (but not the system) such that the curve did not intersect the outer boundary at midpoints, the curve would evolve to be isomorphic to the Hilbert curve.

[To Do: Show three generations with clipped exterior points.]

    Can the "fixed up" curve be represented as a block replacement L-system by explicitly representing new motifs with symbols and corresponding rules? If so what is the minimum number of symbols needed? Yes it can, it needs two symbols, and the Hilbert curve L-system is a minimal description.

    This fixing of self-intersections can be used on all such touching curves -- they can be modified to be space-filling curves, and each can be represented as an L-systems using more symbols. How many more symbols are needed for a given system? I don't know, but I think it is only a small factor times the number of symbols that generates the touching point systems.

MATLAB command:
L_system_tiling( 'SF_T', [ng], 1, 1, 0, 'trav_22a_motif.png', 0, [0 0; 10 30] );
where [ng] is the number of generations.

[To Do: Show the other systems and tilings:
L_system_tiling( 'SF_Sig_Mu', 4, 2, 1, 0, 'trav_21a_21oU_motif.png', 1, [100 0; 131 131], [111 11; 131 20] );
]

Other replacement lattices (similarity tilings)

    Square, hexagonal, and triangular lattices are obvious choices. Lattices on higher dimensions can also be used [To Do: Link to 3-D Hilbert analogue example]. There are also other topologies and geometries, such as periodic and aperiodic substitution tilings, that fit the bill. [Are there any good examples of space-filling systems defined by anisotropic lattice replacements, for example on an alternating 2x3 <--> 3x2 replacement system?]

A system that results in a periodic lattice with a fractal boundary.
   ...or, represented as a recursive
      replacement of  lattice points:
[To Do: Diagram of the first few generations.]
[To Do: Replacement system for
Gosper Island lattice
Right triangle Peano lattice
"Tri-square spiral" replacement system.]

2x2 traversals

    What are the possible traversals, unique up to rotation and a mirror? Here are many, but not all:

2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal

2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
















2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal













2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal









2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal

2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal







2x2 traversal motif

2x2 traversal

2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal







2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal


2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal

2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal
2x2 traversal motif

2x2 traversal






2x2 traversal motif

2x2 traversal



2x2 two-symbol systems

Hilbert curves

Hilbert curve symbol structure


Hilbert curve algorithm graphic

Hilbert curve by generation graphic
Hilbert curve pattern, 1st generation
generation 0, rescaled
Hilbert curve pattern, 1st generation
generation 1, rescaled
Hilbert curve pattern, 2nd generation
generation 2, rescaled
Hilbert curve pattern, 3rd generation
generation 3
Hilbert 2-symbol system self-symmetries
self-symmetries
Hilbert 2-symbol system infinite limit self-symmetries
self-symmetries at infinite limit


Hilbert curve algorithm graphic

Hilbert curve by generation graphic
Hilbert curve pattern, 1st generation
generation 0, rescaled
Hilbert curve pattern, 1st generation
generation 1, rescaled
Hilbert curve pattern, 2nd generation
generation 2, rescaled
Hilbert curve pattern, 3rd generation
generation 3
Hilbert 2-symbol system self-symmetries
self-symmetries
Hilbert 2-symbol system infinite limit self-symmetries
self-symmetries at infinite limit

    What are the symbol sequences along the curves, and what is their string replacement (turtle graphics) representation?



Hilbert curve algorithm graphic

Hilbert curve by generation graphic
Hilbert curve pattern, 5th generation, link to 8th generation
Hilbert average across generations, 5th generation, link to 8th generation







Hilbert curve algorithm graphic

Hilbert curve by generation graphic
Hilbert curve pattern, 5th generation, link to 8th generation
Hilbert average across generations, 5th generation, link to 8th generation







MATLAB commands:
 >> imOut = L_system_tiling( 'Hilbert', [ng], 2, 1, 0, 'trav_33a_33o_motif.png', [ni], [100 0; 10 31], [100 0; 10 110] );
>> imOut = L_system_tiling( 'Hilbert', [ng], 2, 1, 0, 'trav_33a_33o_min9x9_motif.png', [ni], [100 0; 10 31], [100 0; 10 110] );
where [ng] is the number of generations, and [ni] is the index of the initial symbol.

Hilbert region system

    Four symbols are required to represent the two regions that the Hilbert curve separates. The boundary between black and white of the system pattern is a Hilbert curve. Note that the boundaries within the motifs mimic the typical curve replacement system. This example is initialized with the second symbol, resulting in the bilaterally symmetric Hilbert curve.

Hilbert region algorithm graphic

Hilbert region by generation graphic
Hilbert region system pattern. link to 10th generation
Hilbert region system pattern
Hilbert region system average pattern. link to 10th generation
average across generations (before replacement with motifs)
Hilbert region system self-symmetries, init = 1
self-symmetries initializated with the second symbol [To Do: Correct these.]
Hilbert region system self-symmetries, init = 0
self-symmetries
        Hilbert region system self-symmetries
self-symmetries at infinite limit (of the pattern, after replacement with motifs)


     
Hilbert region, 1st generation
Hilbert region, 2nd generation Hilbert region, 3rd generation Hilbert region, 4th generation Hilbert region, 5th generation Hilbert region, 6th generation
Hilbert average region, 1st generation Hilbert average region, 2nd generation Hilbert average region, 3rd generation Hilbert average region, 4th generation Hilbert average region, 5th generation Hilbert average region, 6th generation
Hilbert regions (top) and averagage across generations (bottom), initializated with the second symbol, the bilaterally symmetric case.

Hilbert region Fourier transform

Hilbert region system pattern. link to 10th generation

Hilbert region system pattern
  FT
<==>
Hilbert region Fourier transform, link to 10th generation
hue-phase scale bar
DFT amplitudes colored by phase
 = Hilbert region Fourier transform amplitude, link to 10th generation

amplitudes
* Hilbert region Fourier transform phase no drift, link to 10th generation

phases, no drift
* Hilbert region Fourier transform phase drift, link to 10th generation

phase drifts
      Hilbert region Fourier transform integral phases, link to 10th generation
quarter-phase scale bar
integer multiples of pi/2 radian phases

Hilbert region average Fourier transform

Hilbert region system average pattern. link to 10th generation

Hilbert region average pattern (before replacement with motifs)
  FT
<==>
Hilbert region average Fourier transform, link to 10th generation
hue-phase scale bar
DFT amplitudes colored by phase
= Hilbert region Fourier transform amplitude, link to 10th generation

amplitudes
* Hilbert region average Fourier transform phase no drift, link to 10th generation

phases, no drift
* Hilbert region average Fourier transform phase drift, link to 10th generation

phase drifts
      Hilbert region average Fourier transform integral phases, link to 10th generation
quarter-phase scale bar
integer multiples of pi/2 radian phases
MATLAB command:
>> imOut = L_system_tiling( 'Hilbert', [ng], 4, 1, 0, 'adj_opp_sides_inv_motif.png', 1, [100 0; 12 33], [100 0; 12 112], [102 2; 10 31], [102 2; 10 110] );
>> imOut = L_system_tiling( 'Hilbert', [ng], 4, 1, 0, 'adj_opp_sides_inv_motif.png', 1, [100 0; 12 11], [100 0; 12 112], [102 2; 10 31] );

Size of image:  512 x 512 px.

where [ng] is the number of generations.
Hardcoded:
bAverageAfterReplacement    = true;
flPhaseDriftX        = 1*pi;
flPhaseDriftY        = 1*pi;

flAvgPhaseDriftX     = 1*pi;
flAvgPhaseDriftY     = 1*pi;

Hilbert 2-symbol system

    This is the same 2-symbol system that was used for Hilbert curve symbol structure, but without replacement with a "segment" motif. Rotations and mirrors of the two symbols are not represented in the resulting patterns.

Hilbert 2-symbol algorithm graphic

Hilbert 2-symbol by generation graphic
Hilbert 2-symbol system pattern. link to 10th generation
Hilbert 2-symbol system pattern
Hilbert 2-symbol system average pattern. link to 10th generation
average across generations
Hilbert 2-symbol system self-symmetries
self-symmetries
 ==> Hilbert 2-symbol system infinite limit self-symmetries
self-symmetries at infinite limit

Hilbert 2-symbol algorithm graphic

Hilbert 2-symbol by generation graphic
Hilbert 2-symbol system pattern. link to 10th generation
Hilbert 2-symbol system pattern
Hilbert 2-symbol system average pattern. link to 10th generation
average across generations
Hilbert 2-symbol system self-symmetries
self-symmetries
==> Hilbert 2-symbol system infinite limit self-symmetries
self-symmetries at infinite limit


Hilbert 2-symbol Fourier transform

Hilbert region system pattern. link to 10th generation

Hilbert region system pattern
  FT
<==>
Hilbert region Fourier transform, link to 10th generation
hue-phase scale bar
DFT amplitudes colored by phase
 = Hilbert region Fourier transform amplitude, link to 10th generation

amplitudes
* Hilbert region Fourier transform phase no drift, link to 10th generation

phases, no drift
* Hilbert region Fourier transform phase drift, link to 10th generation

phase drifts
      Hilbert region Fourier transform integral phases, link to 10th generation
quarter-phase scale bar
integer multiples of pi/2 radian phases

Hilbert 2-symbol average Fourier transform

Hilbert region system average pattern. link to 10th generation

Hilbert region average pattern
  FT
<==>
Hilbert region average Fourier transform, link to 10th generationHilbert region average Fourier transform, link to 10th generation
hue-phase scale bar
DFT amplitudes colored by phase
= Hilbert region Fourier transform amplitude, link to 10th generation

amplitudes
* Hilbert region average Fourier transform phase no drift, link to 10th generation

phases, no drift
* Hilbert region average Fourier transform phase drift, link to 10th generation

phase drifts
      Hilbert region average Fourier transform integral phases, link to 10th generation
quarter-phase scale bar
integer multiples of pi/2 radian phases
MATLAB command:
>> imOut = L_system_tiling( 'Hilbert', [ng], 4, 1, 0, 'adj_opp_sides_inv_motif.png', 1, [100 0; 12 33], [100 0; 12 112], [102 2; 10 31], [102 2; 10 110] );
where [ng] is the number of generations.
Hardcoded:
bAverageAfterReplacement    = true;
flPhaseDriftX        = 1*pi;
flPhaseDriftY        = 1*pi;

flAvgPhaseDriftX     = 1*pi;
flAvgPhaseDriftY     = 1*pi;



Hilbert variant curves

Hilbert variant curve symbol structure


Hilbert curve algorithm graphic

Hilbert variant curve by generation graphic
Hilbert variant curve pattern, 0th generation
generation 0, rescaled
Hilbert variant curve pattern, 1st generation
generation 1, rescaled
Hilbert variant curve pattern, 2nd generation
generation 2, rescaled
Hilbert variant curve pattern, 3rd generation
generation 3
Hilbert variant 2-symbol system self-symmetries
self-symmetries
Hilbert variant 2-symbol system infinite limit self-symmetries
self-symmetries at infinite limit


Hilbert curve algorithm graphic

Hilbert variant curve by generation graphic
Hilbert variant curve pattern, 0th generation
generation 0, rescaled
Hilbert variant curve pattern, 1st generation
generation 1, rescaled
Hilbert variant curve pattern, 2nd generation
generation 2, rescaled
Hilbert variant curve pattern, 3rd generation
generation 3
Hilbert variant 2-symbol system self-symmetries
self-symmetries
Hilbert variant 2-symbol system infinite limit self-symmetries
self-symmetries at infinite limit

    What are the symbol sequences along the curves, and what is their string replacement (turtle graphics) representation?



Hilbert variant curve algorithm graphic

Hilbert variant curve by generation graphic
Hilbert variant curve pattern, 5th generation, link to 8th generation
Hilbert variant average across generations, 5th generation, link to 8th generation







Hilbert variant curve algorithm graphic

Hilbert variant curve by generation graphic
Hilbert curve pattern, 5th generation, link to 8th generation
Hilbert variant average across generations, 5th generation, link to 8th generation







MATLAB commands:
 >> imOut = L_system_tiling( 'HVSF', [ng], 2, 1, 0, 'trav_33a_33o_motif.png', [ni], [30 130; 120 11], [30 130; 120 20] );
>> imOut = L_system_tiling( 'HVSF', [ng], 2, 1, 0, 'trav_33a_33o_min9x9_motif.png', [ni], [30 130; 120 11], [30 130; 120 20] );
where [ng] is the number of generations, and [ni] is the index of the initial symbol.


[To Do:
Hilbert tree circumnavigation
L_system_tiling( 'Hilbert_BT', 4, 3, 1, 0, 'trav_33adde_33add_33od_18x18_motif.png', 0, [101 1; 11 110], [101 1; 11 32], [101 1; 11 111]  );
M & N system
M & M system:
L_system_tiling(  'MMSF', 4, 2, 1, 0, 'trav_21a_21oU_motifs.png', 0, [100 0; 131 131], [100 0; 131 20] );
]


Sierpiński curves

    There are systems that use double traversals. The most well known is the Sierpiński curve. These can sometimes (often? always?) be considered circuits around space-filling trees. [To Do: For the Sierpiński curve the tree is a "cross fractal". Show tree and its system.] Both the tree and the curve use the Sierpiński cross rules, along with a corresponding pair of traversal motifs.
Sierpiński cross
Sierpiński cross system, link to
 Sierpiński cross system, link to



Sierpiński curve algorithm graphic

Sierpiński curve by generation graphic
Sierpiński curve pattern
generation 1, rescaled
Sierpiński curve pattern
generation 2, rescaled
Sierpiński curve pattern
generation 3
Sierpiński curve symmetry graphic
self-symmetries









    Initializing with the second symbol results in two curves, each covering a diagonal half of a square:

Sierpiński curve algorithm graphic

Sierpiński curve by generation graphic
Sierpiński curve pattern
generation 1, rescaled
Sierpiński curve pattern
generation 2, rescaled
Sierpiński curve pattern
generation 3
Sierpiński curve symmetry graphic
self-symmetries




    The second symbol represents a double traversal of a lattice point. Can the traveral be modified such that the lattice center is visited, and visited only once? Yes, but the diagonal symmetries are broken:
[To Do]


MATLAB commands:
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'trav_11a-22a_motif.png', [ni], [30 0; 1 10], [30 1; 1 10] );
where [ng] is the number of generations, and [ni] is the index of the initial symbol.

    The motif has considerable flexibility -- the traversal intersections with the motif edge must occur at the same distance from the same or opposite corner [To Do: Diagram.].


Sierpiński curve algorithm graphic




Sierpiński curve pattern, link to 6th generation



Sierpiński curve algorithm graphic
Sierpiński curve pattern, link to 6th generation


Sierpiński curve algorithm graphic




Sierpiński curve pattern, link to 6th generation



Sierpiński curve algorithm graphic
Sierpiński curve pattern, link to 6th generation

What are some traversal patterns that go through the center, or the centers of  quadrants, of each motif?


Sierpiński curve algorithm graphic




Sierpiński curve pattern, link to 6th generation









Sierpiński curve algorithm graphic


Sierpiński curve pattern, link to 6th generation
Third generation, large motif
large motif

ventilation system, link to
"ventilation system", an abstration using this motif with the Sierpiński curve circuit system.




Sierpiński curve algorithm graphic

Sierpiński curve pattern, link to 6th generation


Sierpiński curve algorithm graphic


Sierpiński curve pattern, link to 6th generation


Sierpiński curve algorithm graphic

Sierpiński curve pattern, link to 6th generation


Sierpiński curve algorithm graphic


Sierpiński curve pattern, link to 6th generation


Sierpiński curve algorithm graphic

Sierpiński curve pattern, link to 6th generation


MATLAB commands:
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'trav_11a-22a_18x18_min_r_motif.png', 0, [30 0; 1 10], [30 1; 1 10] );
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'trav_11a-22a_18x18_min_s_motif.png', 0, [30 0; 1 10], [30 1; 1 10] );
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'trav_11a-22a_18x18_min_i_motif.png', 0, [30 0; 1 10], [30 1; 1 10] );
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'trav_11a-22a_18x18_min_j_motif.png', 0, [30 0; 1 10], [30 1; 1 10] );
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'trav_11a-22a_18x18_min_a_motif.png', 0, [30 0; 1 10], [30 1; 1 10] );
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'trav_11a-22a_18x18_min_b_motif.png', 0, [30 0; 1 10], [30 1; 1 10] );
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'trav_11a-22a_18x18_min_c_motif.png', 0, [30 0; 1 10], [30 1; 1 10] );
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'trav_11a-22a_18x18_min_d_motif.png', 0, [30 0; 1 10], [30 1; 1 10] );
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'trav_11a-22a_18x18_min_e_motif.png', 0, [30 0; 1 10], [30 1; 1 10] );
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'trav_11a-22a_18x18_min_f_motif.png', 0, [30 0; 1 10], [30 1; 1 10] );
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'trav_11a-22a_18x18_min_g_motif.png', 0, [30 0; 1 10], [30 1; 1 10] );
where [ng] is the number of generations.
Are there motifs for which the shapes on both sides of the curve are identical [To Do: Yes, at least one, but not the parallel 'r' version above.]?

Sierpiński curve circuit

    Commonly the Sierpiński curve is illustrated as a closed loop, a circuit. These loops are simple composites of four rotations of the basic case:


Sierpiński curve circuit algorithm graphic

Sierpiński curve circuit by generation graphic


Sierpiński curve circuit pattern
Sierpiński circuit







    Note that this circuit does not contain self-symmetries -- the whole pattern is not exactly repeated at smaller scales.



Sierpiński curve circuit algorithm graphic

Sierpiński curve circuit by generation graphic


Sierpiński curve circuit pattern, link to third generation
A second generation Sierpiński circuit weave supported by loops.
Third generation.







MATLAB commands:
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'trav_11a-22a_motif.png', [30 0; 20 10], [30 0; 1 10], [30 1; 1 10] );
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'Ribbon_11a-22a_54_162_gold_blue.png', [30 0; 20 10], [30 0; 1 10], [30 1; 1 10] );
where [ng] is the number of generations.

Sierpiński curve complement circuit

    The second symbol can also be used to form a circuit over the center of the pattern, with the corners each covered by separate traversals:


Sierpiński curve circuit algorithm graphic

Sierpiński curve circuit by generation graphic


Sierpiński curve circuit pattern
Sierpiński circuit






    If any generation is tiled periodically, the pattern is a square tiling of the central circuit [To Do: Illustrate.]

    What system results in only the central circuit? It  requires two new symbols, a second single traversal and a terminating symbol that covers the corners.


Sierpiński curve circuit algorithm graphic

Sierpiński curve circuit by generation graphic


Sierpiński curve circuit pattern
Sierpiński circuit






The first and third symbol represent a traversal from one side to an adjacent side, but the first exits adjacent to the same corner while the third exits adjacent to opposite corners.



MATLAB commands:

 
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'trav_11a-22a_motif.png', [30 0; 20 10], [30 0; 1 10], [30 1; 1 10]  );
 >> imOut = L_system_tiling 'SC', [ng], 2, 1, 0, 'trav_11a-22a_motif.png', [1 11; 11 1], [30 0; 1 10], [30 1; 1 10]  );
 >> imOut = L_system_tiling  'SC', 2, 4, 1, 0, 'trav_11a-22a-22a-t_motif.png', [2 12; 32 22], [30 0; 1 10], [30 1; 1 10], [3 2; 2  10], [3 3; 3 3]   );
 >> imOut = L_system_tiling  'SC', 2, 4, 1, 0, 'trav_33a-33ad-33a-t_motif.png', [2 12; 32 22], [30 0; 1 10], [30 1; 1 10], [3 2; 2 10], [3 3; 3 3]   );
where [ng] is the number of generations, and [ni] is the index of the initial symbol.

Bar bar cross system

    This system has a very short description, only 9 bits. The boundary between symbols, white and black, is space filling on a topological torus. What fraction of the curve is differentiable at the infinite limit? Half?
    It is a circuit around space-filling tree. [To Do: Find and illustrate the tree system.]

Bar bar cross algorithm graphic

Bar bar cross by generation graphic
Bar bar cross pattern
Bar bar cross system pattern
Bar bar cross average pattern
average across generations
Bar bar cross symmetry graphic
self-symmetries







Shifting the frame by one unit on a torus and cutting results in a boundary that is space-filling on a plane.
Bar bar_cross torus to square shift graphic







double traversal motif

2x2 double traversal
double traversal motif

2x2 double traversal

L_system_tiling( 'BBC2', 7, 2, 1, 0, 'trav_33oa_3x3min_motif.png', 0, [21 121; 0 0], [10 30; 11 30] );
L_system_tiling( 'BBC2', 3, 2, 1, 0, 'trav_33oad_motif.png', 0, [21 121; 0 0], [10 30; 11 30] );
L_system_tiling( 'BBC2', 3, 2, 1, 0, 'trav_33oad2_motif.png', 0, [21 121; 0 0], [10 30; 11 30] );
double traversal motif

2x2 double traversal
double traversal motif

2x2 double traversal

L_system_tiling( 'BBC2', 7, 2, 1, 0, 'trav_33oa_3x3min_motif.png', 0, [10 110; 11 111], [21 121; 0 1] );
L_system_tiling( 'BBC2', 4, 2, 1, 0, 'trav_33om_33a_min9x9_motif.png', 0, [10 110; 11 111], [21 121; 0 1] );
L_system_tiling( 'BBC2', 3, 2, 1, 0, 'trav_33oad2_motif.png', 0, [10 110; 11 111], [21 121; 0 1] );

traversal motif

2x2 double traversal
traversal motif

2x2 double traversal
traversal motif

2x2 double traversal
traversal motif

2x2 double traversal



traversal motif

2x2 double traversal
traversal motif

2x2 double traversal
traversal motif

2x2 double traversal
traversal motif

2x2 double traversal
traversal motif

2x2 double traversal
traversal motif

2x2 double traversal


>> L_system_tiling( 'BBC', 3, 8, 1, 0, 'bar_line_8_motifs.png',  [20 20; 102 102], [25 123; 0 0], [23 123; 0 1], [12 110; 11 111], [132 30; 13 30], [12 110; 13 111], [10 34; 11 112], [25 123; 0 0], [23 123; 0 1] );

MATLAB command:
>> imOut = L_system_tiling( 'BBC', [ng],  2, 1, 0, '', 0, [0 0; 1 1], [1 0; 1 0] );
>> imOut = L_system_tiling( 'BBC', [ng], 4, 1, 0, 'bar_line_motifs.png',  [20 20; 102 102], [23 123; 0 0], [23 123; 0 1], [12 110; 13 111], [132 30; 13 30] ); % Not right at third generation
% High symmetry variant
>> imOut = L_system_tiling( 'BBC', [ng], 4, 1, 0, 'bar_line_motifs.png', 0, [23 123; 0 0], [23 123; 0 1], [132 110; 13 111], [132 30; 13 30] );
where [ng] is the number of generations.
Hardcoded:
flPhaseDriftX        = 1*pi;
flPhaseDriftX        = 1*pi;
flAvgPhaseDriftX     = 1*pi;
flAvgPhaseDriftY     = 1*pi;


% Island system
L_system_tiling( 'CL', 8, 2, 1, 0, 'cl_3x3min_motifs.png', 0, [0 11; 1 0], [30 20; 0 10] );

2x2 five-symbol system

Z 4-U system

    This complete set of  traversals defines a space-filling curve. Note the four symbols on the right all represent the same traversal pattern but with different entrance/exit directions.

Z 4-U system algorithm graphic

space-filling curve algorithm graphic
space-filling curve by generation graphic
space-filling system pattern, 3rd generation space-filling system self-symmetries
self-symmetries
space-filling curve through lattice algorithm graphic
space-filling system pattern, 3rd generation, link to 7th
space-filling curve first symbol algorithm graphic
space-filling curve first symbol by generation graphic
space-filling system pattern, 6rd generation, link to 10th space-filling system pattern, 7rd generation, link to 9th
space-filling curve algorithm graphic
space-filling curve by generation graphic
space-filling system pattern, 3rd generation space-filling system self-symmetries
self-symmetries
space-filling curve through lattice algorithm graphic space-filling system pattern, 3rd generation, link to 7th
space-filling curve first symbol algorithm graphic
space-filling curve first symbol by generation graphic
space-filling system pattern, 6rd generation, link to 10th space-filling system pattern, 7rd generation, link to 9th
space-filling curve algorithm graphic
space-filling curve by generation graphic
space-filling system pattern, 3rd generation space-filling system self-symmetries space-filling curve through lattice algorithm graphic space-filling system pattern, 3rd generation, link to 7th
space-filling curve first symbol algorithm graphic
space-filling curve first symbol by generation graphic
space-filling system pattern, 6rd generation, link to 10th space-filling system pattern, 7rd generation, link to 9th
space-filling curve algorithm graphic
space-filling curve by generation graphic
space-filling system pattern, 3rd generation space-filling system self-symmetries space-filling curve through lattice algorithm graphic space-filling system pattern, 3rd generation, link to 7th
space-filling curve first symbol algorithm graphic
space-filling curve first symbol by generation graphic
space-filling system pattern, 6rd generation, link to 10th space-filling system pattern, 7rd generation, link to 9th
space-filling curve algorithm graphic
space-filling curve by generation graphic
space-filling system pattern, 3rd generation space-filling system self-symmetries space-filling curve through lattice algorithm graphic space-filling system pattern, 3rd generation, link to 7th
space-filling curve first symbol algorithm graphic
space-filling curve first symbol by generation graphic
space-filling system pattern, 6rd generation, link to 10th space-filling system pattern, 7rd generation, link to 9th


A motif that is perpendicular to one of the space-filling traversals (and the others blank), results in this set of regions, arbitrarily colored. Two examples are shown [To Do: Which rules for each?], one of them mirrored to show their imperfect bilateral symmetry.
space-filling curve algorithm graphic







MATLAB commands:
L_system_tiling( 'SF', [ng], 5, 1, 0, 'trav_5s_AD_clr_motif.png', [ni], [31 124; 3 11], [20 30; 132 33], [20 30; 132 114], [20 30; 14 114], [20 30; 14 33] );
L_system_tiling( 'SF', [ng], 5, 1, 0, 'trav_5s_AD_motif.png', [ni], [31 124; 3 11], [20 30; 132 33], [20 30; 132 114], [20 30; 14 114], [20 30; 14 33] );
L_system_tiling( 'SF', [ng], 5, 1, 0, 'trav_5s_AD_arc_tiny1_motif_tiny.png', [ni], [31 124; 3 11], [20 30; 132 33], [20 30; 132 114], [20 30; 14 114], [20 30; 14 33] );
L_system_tiling( 'SF', [ng], 5, 1, 0, 'trav_5s_AD_c_min9x9_motif.png', [ni], [31 124; 3 11], [20 30; 132 33], [20 30; 132 114], [20 30; 14 114], [20 30; 14 33] );
L_system_tiling( 'SF', [ng], 5, 1, 0, 'trav_5s_AD_one_diag2x2_motif.png', [ni], [31 124; 3 11], [20 30; 132 33], [20 30; 132 114], [20 30; 14 114], [20 30; 14 33] );
L_system_tiling( 'SF', [ng], 5, 1, 0, 'trav_5s_AD_one_diag3x3_motif.png', [ni], [31 124; 3 11], [20 30; 132 33], [20 30; 132 114], [20 30; 14 114], [20 30; 14 33] );
where [ng] is the number of generations, and [ni] is the index of the initial symbol.

[To Do: Orthogonal traverals produce partly inlinked chains. Is this possible with any space-filling system contructed with traversals? Yes.
L_system_tiling( 'SF', 4, 5, 1, 0, 'SF_5_link_test.png', 1, [31 124; 3 11], [20 30; 132 33], [20 30; 132 114], [20 30; 14 114], [20 30; 14 33] );
The first symbol's orange diagonal corresponds to the "night and day -- one_diag" circuits, above.

3x3 two-symbol systems

Peano curves

Peano curves symbol structure

Peano space-filling algorithm graphic

Peano space-filling by generation graphic
Peano space-filling system pattern
generation 0, 1x1
Peano space-filling system pattern
generation 1, 3x3
Peano space-filling system pattern
generation 2, 9x9
Peano 2-symbol system self-symmetries
self-symmetries

Peano space-filling algorithm graphic

Peano space-filling by generation graphic
Peano space-filling system pattern
generation 0, 1x1
Peano space-filling system pattern
generation 1, 3x3
Peano space-filling system pattern
generation 2, 9x9
Peano 2-symbol system self-symmetries
self-symmetries

    Walter Wunderlich's (3rd) variations of the Peano system [To Do: Show this Peano variations].


    What are the sequences of symbols along the curves?
1 1 0 0  1  0 0 1 1   1 1 0 0 1 1 0 0 1 1     
0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0

MATLAB commands:
>> imOut = L_system_tiling( 'Peano', [ng], 2, 1, 0, 'trav_33a_33om_motif.png', [ni], [20 101 0; 100 1 120; 1 101 0], [20 101 1; 100 1 120; 1 101 0] );
>> imOut = L_system_tiling( 'Peano', [ng], 2, 1, 0, 'trav_33a_33om_motif.png', [ni], [20 101 0; 10 1 30; 1 101 0], [20 101 1; 10 1 30; 1 101 0] );
where [ng] is the number of generations, and [ni] is the index of the initial symbol.

Peano two symbol system


Hilbert region algorithm graphic

Hilbert region by generation graphic
Peano two symbol pattern. link to 7th generation
Peano two symbol system pattern
Peano two symbol average pattern. link to 7th generation
average across generations
Peano two symbol system self-symmetries
self-symmetries
     Note that there are more "almost" self-symmetries.  For example, the upper right and left quadrants differ only at a single point, their lower left and right (respectively) corners. [To Do: An "almost" self-symmetry diagram.]

Peano two symbol Fourier transform

Peano two symbol pattern. link to 7th generation

Peano two symbol system pattern
  FT
<==>
Peano two symbol Fourier transform, link to 7th generation
hue-phase scale bar
DFT amplitudes colored by phase
 = Peano two symbol Fourier transform amplitude, link to 7th generation

amplitudes
* Peano two symbol Fourier transform phase no drift, link to 7th generation

phases, no drift
* Peano two symbol Fourier transform phase drift, link to 7th generation

phase drifts
      Peano two symbol Fourier transform integral phases, link to 7th generation
quarter-phase scale bar
integer multiples of pi/2 radian phases

Peano two symbol average Fourier transform

Peano two symbol average pattern. link to 7th generation

Peano two symbol average pattern
  FT
<==>
Peano two symbol average Fourier transform, link to 7th generation
hue-phase scale bar
DFT amplitudes colored by phase
= Peano two symbol Fourier transform amplitude, link to 7th generation

amplitudes
* Peano two symbol average Fourier transform phase no drift, link to 7th generation

phases, no drift
* Peano two symbol average Fourier transform phase drift, link to 7th generation

phase drifts
      Peano two symbol average Fourier transform integral phases, link to 7th generation
quarter-phase scale bar
integer multiples of pi/2 radian phases


MATLAB command:
 >> imOut = L_system_tiling( 'Peano', [ng], 2, 1, 0, '', 1, [0 100 0; 101 1 101; 1 30 20], [0 100 1; 101 1 101; 1 30 20] );
where [ng] is the number of generations.
Hardcoded:
flPhaseDriftX        = 1*pi;
flPhaseDriftY        = 1*pi;

flAvgPhaseDriftX     = 1*pi;
flAvgPhaseDriftY     = 1*pi;

Peano region system

   The boundary between black and white of the system pattern is a Peano curve. Note that the boundaries within the motifs mimic the typical curve replacement system.

Peano region algorithm graphic

Peano region by generation graphic
Peano region system pattern. link to 6th generation
Peano region system pattern
Peano region system average pattern. link to 6th generation
average across generations
Peano region system self-symmetries
self-symmetries
     Note that there are more "almost" self-symmetries.  For example, the lower left 1/3x1/3 differs only at a single point, its upper-right corner. [To Do: An "almost" self-symmetry diagram.]


Peano region, 1st generation
Peano region, 2nd generation Peano region, 3rd generation Peano region, 4th generation

Peano average region, 1st generation Peano average region, 2nd generation Peano average region, 3rd generation Peano average region, 4th generation

Pattern (top) and  average pattern (bottom) by generation.

Peano region Fourier transform

Peano region system pattern. link to 6th generation

Peano region system pattern
  FT
<==>
Peano region Fourier transform, link to 6th generation
hue-phase scale bar
DFT amplitudes colored by phase
 = Peano region Fourier transform amlitudes, link to 6th generation

amplitudes
* Peano region Fourier transform phases, link to 6th generation

phases, no drift
      Peano region Fourier transform integral phases, link to 6th generation
quarter-phase scale bar
integer multiples of pi/2 radian phases

Peano region average Fourier transform

Peano region system average pattern. link to 6th generation

Peano region average pattern
  FT
<==>
Peano region average Fourier transform, link to 6th generation
hue-phase scale bar
DFT amplitudes colored by phase
= Peano region Fourier transform amplitude, link to 6th generation

amplitudes
* Peano region average Fourier transform phase no drift, link to 6th generation

phases, no drift
* Peano region average Fourier transform phase drift, link to 6th generation

phase drifts
      Peano region average Fourier transform integral phases, link to 6th generation
quarter-phase scale bar
integer multiples of pi/2 radian phases
MATLAB command:
>> imOut = L_system_tiling( 'Peano', 4, 4, 1, 0, 'adj_opp_sides_inv_r_motif.png', 0, [0 100 0; 103 3 103; 1 32 22], [0 100 1; 103 3 103; 1 32 22], [2 102 2; 101 1 101; 3 30 20], [2 102 3; 101 1 101; 3 30 20] );
where [ng] is the number of generations.
Hardcoded:
bAverageAfterReplacement    = true;
flAvgPhaseDriftX     = 1*pi;
flAvgPhaseDriftY     = 1*pi;




L_system_tiling( 'Spiral_SF', 3, 2, 1, 0,'trav_33a_33oc_motif.png', 0, [100 1 0; 20 130 31; 1 10 31], [100 1 0; 20 130 31; 1 10 110] );

L_system_tiling( 'Spiral_SF', 4, 3, 1, 0,'trav_33a_33ac_33om_min9x9_motif.png', 2, [1 2 0; 12 30 21; 10 31 0], [1 2 0; 12 30 21; 12 31 2], [1 2 0; 12 30 21; 10 31 2] );
L_system_tiling( 'Spiral_SF', 6, 6, 1, 0,'trav_33_bw2x2_motif.png', 2, [4 5 3; 12 30 24; 10 31 3], [4 5 3; 12 30 24; 12 31 5], [4 5 3; 12 30 24; 10 31 5], [1 2 0; 15 33 21; 13 34 0], [1 2 0; 15 33 21; 15 34 2], [1 2 0; 15 33 21; 13 34 2] );

Spiral space-filling systems

    This system has complement symmetric rules. The boundary between black and white is a space-filling curve. The pattern itself is not symmetric, unless the initial rule is modified to use the two symbols symmetrically (see example below).

    I found this system just through tinkering with symmetric rules. The space-filling curve is not represented explicitly, only through the juxtoposition of squares. How can the edge be represented explicitly? Is there a complete set of traversals that describes this systerm? On what square lattice replacement system would they operate?
Spiral space-filling algorithm graphic

Spiral space-filling by generation graphic
Spiral space-filling system pattern. link to 7th generation
Spiral space-filling pattern
Spiral space-filling system average pattern. link to 7th generation
average across generations
Spiral space-filling system self-symmetries
self-symmetries

Spiral space-filling Fourier transform

Spiral space-filling system pattern. link to 7th generation

Spiral space-filling pattern

  FT
<==>
Spiral space-filling Fourier transform, link to 7th generation
hue-phase scale bar
DFT amplitudes colored by phase
 = Spiral space-filling Fourier transform amplitude, link to 7th generation

amplitudes
* Spiral space-filling Fourier transform phase no drift, link to 7th generation

phases, no drift
* Spiral space-filling Fourier transform phase drift, link to 7th generation

phase drifts
      Spiral space-filling Fourier transform integral phases, link to 7th generation
quarter-phase scale bar
integer multiples of pi/2 radian phases

Serpinski right triangle average Fourier transform

Spiral space-filling system average pattern, link to 7th generation

Spiral space-filling average pattern
  FT
<==>
Spiral space-filling average Fourier transform, link to 7th generation
hue-phase scale bar
DFT amplitudes colored by phase
= Spiral space-filling average Fourier transform amplitude, link to 7th generation

amplitudes
* Spiral space-filling average Fourier transform phase no drift, link to 7th generation

phases, no drift
* Spiral space-filling average Fourier transform phase drift, link to 7th generation

phase drifts
      Spiral space-filling average Fourier transform integral phases, link to 7th generation
quarter-phase scale bar
integer multiples of pi/2 radian phases
MATLAB command:
>> imOut = L_system_tiling( 'SP', [ng],  2, 1, 0, '', 0, [0 2 2; 0 1 4; 0 7 7], [1 3 3; 1 0 5; 1 6 6] );
where [ng] is the number of generations.
Hardcoded:
flPhaseDriftX        = 1*pi;
flPhaseDriftY        = 1*pi;

flAvgPhaseDriftX     = 1*pi;
flAvgPhaseDriftY     = 1*pi;

Progressive (np = 3) Spiral space-filling system (not shown)
>> imOut = L_system_tiling( 'PG', 3, 3, 1, 0, '', 0, [0 3 3; 0 1 6; 0 10 10], [1 4 4; 1 2 7; 1 11 11], [2 5 5; 2 0 8; 2 9 9] );
 where [ng] is the number of generations.
Arithmetic subsequence  SP( 3n + b ), b = [1,3], of the Spiral space-filling system pattern:
Spiral space-filling system pattern, arithmetic subsequence SP( 3n + 0 )
Spiral space-filling system pattern, arithmetic subsequence SP( 3n + 0 )
Spiral space-filling system pattern, arithmetic subsequence SP( 3n + 1 )
Spiral space-filling system pattern, arithmetic subsequence SP( 3n + 1 )
This is the inverse of the pattern itself.
Spiral space-filling system pattern, arithmetic subsequence SP( 3n + 2 )
Spiral space-filling system pattern, arithmetic subsequence SP( 3n + 2 )
[To Do: Self-similarity diagram. Is there an iterated morphism for this pattern?]

    These "H" patterns look a lot like:
>> imOut = L_system_tiling( 'BBC', 5, 4, 1, 0, 'trav_33ac_33oab_motif.png',  10, [23 123; 0 0], [23 123; 0 1], [132 110; 13 111], [132 30; 13 30] );
which is anather double traversal system.

MATLAB command:
>> imOut = L_system_tiling( 'SP', [ng], 2,  3[o], '', 0, [0 2 2; 0 1 4; 0 7 7], [1 3 3; 1 0 5; 1 6 6] );
where [ng] is the number of generations and [o] is the offset [1,3].
   
                           

Double S spiral space-filling system

Double S spiral space-filling algorithm graphic

Double S spiral space-filling by generation graphic
Double S spiral space-filling system pattern

    Could the boundary be a solution to a boundary length maximization problem, with some constraint on the number of right angles?

[To Do: A smooth boundary morphing between a generation. Assemble a checkerboard such that four armed connected regions can be colored.]

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

Double F spiral space-filling system

Double F spiral space-filling algorithm graphic

Double F spiral space-filling by generation graphic
Double F spiral space-filling system pattern

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

Anti-symmetric spiral space-filling system

Anti-symmetric spiral space-filling algorithm graphic

Anti-symmetric spiral space-filling by generation graphic
Anti-symmetric spiral space-filling system pattern
Anti-symmetric spiral space-filling pattern
Anti-symmetric spiral space-filling system pattern
average across generations
    This system has the same rules as the Spiral space-filling system (above), but with a 3x4 set of initial symbols such that the resulting system/pattern is fully anti-symmetric (identical after a pi/2 rotation and complement). These initial symbol pattern is a hybrid of the rules themselves, the first (or second) rule and the anti-symmetric copy of the first (or second) rule.

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


[To Do:

3x3 thirds:
L_system_tiling( 'SF', 3, 3, 1, 0, 'trav_thirds_3x3x3.png', 0, [21 121 122; 0 100 0; 102 101 1], [22 21 121; 11 111 100; 12 110 111], [131 31 122; 100 2 0; 2 12 1] ); % 3-symbol 3x3 thirds system
L_system_tiling( 'SF', 3, 2, 1, 0, 'trav_33o2_33a_2_motif.png', 0, [ 101 0 100; 21 100 1; 100 0 121], [101 0 131; 21 131 10; 100 11 110] ); % 2-symbol

4-symbol 2x2:
L_system_tiling(  'SF', 2, 2, 1, 0, 'MN_outl_27_w_motif.png', 0, [ 100 0 0 0; 101 20 20 1; 21 21 121 121; 1 101 20 120], [ 30 111 131 130; 100 11 10 121; 101 11 130 1; 131 10 11 10 ]  );

Hilbert
L_system_tiling( 'SF_Hilbert', 5, 2, 1, 0, 'Hilbert_motif_a.png', 0, [100 0; 10 31], [100 0; 10 110] );
Diagonally supplemented Hilbert
L_system_tiling( 'Z2', 5, 5, 1, 0, 'Z_motif_a.png', 4, [100 0; 10 31], [100 0; 10 110], [100 0; 10 112], [100 0; 11 112], [22 13; 33 2]);
L_system_tiling( 'FourZ', 2, 5, 1, 0, 'Z_motif_a.png', [14 4; 4 14], [100 0; 10 31], [100 0; 10 110], [100 0; 10 112], [100 0; 11 112], [22 13; 33 2]);


(other space filling systems)
L_system_tiling( 'SF1', 2, 2, 1, 0, 'SF1_2s_motif.png', 0, [1 10 1; 11 10 31; 21 30 21], [1 30 1; 0 1 0; 31 10 11] );
L_system_tiling( 'R_tree', 4, 2, 1, 0, 'R_motif_b.png', 0, [0 0; 1 1], [1 0; 1 0] );

L_system_tiling( 'Pinwheel_3s_v1', 5, 3, 1, 0, 'trav_11a_21o_21a_rgb_motif.png', 0,   [131 0; 32 10], [102 121; 1 122], [30 0; 1 1] );
L_system_tiling( 'Pinwheel_3s_v2', 5, 3, 1, 0, 'trav_11a_21o_21a_rgb_motif.png', 0,   [131 132; 112 132], [102 121; 1 122], [30 0; 1 1] );


% touching examples.
L_system_tiling( 'OSF', 8, 2, 1, 0, '../motifs/2x2_bd_2-5x5_a_motif.png', 0, [ 31 21; 1 11], [111 10; 0 31] );

L_system_tiling( 'Pinwheel_3s_v3', 3, 3, 1, 0, 'trav_11a_21o_21a_rgb_motif.png', 0, [131 0; 32 10], [102 121; 1 122], [21 121; 1 1] );
L_system_tiling( 'Pinwheel_3s_v4', 3, 3, 1, 0, 'trav_11a_21o_21a_rgb_motif.png', 0, [131 132; 112 132], [102 121; 1 122], [21 121; 1 1] );

L_system_tiling( 'Pinwheel_3s', 3, 6, 1, 0, 'crn_opp_adj_15s6d_motif.png', [30 0; 20 10],   [134 0; 32 10], [105 121; 1 122], [33 3; 4 1]   , [131 3; 35 13], [102 124; 4 125], [30 0; 1 4] );
]




Checkerboards

L_system_tiling( 'X', 6, 2, 1, 0, '', 0, [0 1 0; 1 0 1; 0 1 0], [1 0 1; 0 1 0; 1 0 1] );
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [0 1 0; 1 0 1; 0 1 0], [0 1 0; 1 0 1; 0 1 0] );


Boundaries

L_system_tiling( 'BD1', 6, 3, 1, 0, '', 0, [1 2 2; 2 7 2; 2 2 1], [0 3 0; 2 2 9; 2 2 0], [2 2 2; 2 2 2; 2 2 2] );
L_system_tiling( 'BD2', 6, 3, 1, 0, '', 0, [1 4 1; 2 2 10; 2 2 1], [0 2 2; 2 6 2; 2 2 0], [2 2 2; 2 2 2; 2 2 2] );

L_system_tiling( 'BD2a', 6, 3, 1, 0, '', 0, [1 4 1; 2 2 10; 2 2 1], [0 2 2; 2 6 2; 2 2 1], [2 2 2; 2 2 2; 2 2 2] );

L_system_tiling( 'BD3', 5, 3, 1, 0, '', 0, [0 2 2; 2 7 2; 2 2 0], [0 3 0; 2 2 9; 2 2 0], [2 2 2; 2 2 2; 2 2 2] );
L_system_tiling( 'BD4', 5, 3, 1, 0, '', 0, [0 2 2; 2 7 2; 2 2 6], [0 3 0; 2 2 9; 2 2 0], [2 2 2; 2 2 2; 2 2 2] );

L_system_tiling( 'BD5', 5, 3, 1, 0, '', 0, [1 2 2; 2 0 2; 2 2 7], [0 3 0; 2 2 9; 2 2 0], [2 2 2; 2 2 2; 2 2 2] );
L_system_tiling( 'BD6', 6, 3, 1, 0, '', 0, [1 2 2; 2 6 2; 2 2 7], [0 3 0; 2 2 9; 2 2 0], [2 2 2; 2 2 2; 2 2 2] );
L_system_tiling( 'BD6str', 5, 3, 1, 0, '', [15 0; 0 15], [1 2 2; 2 6 2; 2 2 7], [0 3 0; 2 2 9; 2 2 0], [2 2 2; 2 2 2; 2 2 2] );
L_system_tiling( 'BD6sqr', 5, 3, 1, 0, '', [3 0; 0 9], [1 2 2; 2 6 2; 2 2 7], [0 3 0; 2 2 9; 2 2 0], [2 2 2; 2 2 2; 2 2 2] );


L_system_tiling( 'MT', 8, 3, 1, 0, '', 0, [10 7;  1 4], [0 0; 2 0], [2 2; 2 2] ); % Monohedral turtle


Repeat inverse
L_system_tiling( 'test', 5, 2, 1, 0, '', 0, [1 0 0; 0 1 0; 0 0 1], [0 1 1; 1 0 1; 1 1 0] );
L_system_tiling( 'H', 6, 2, 1, 0, '', 0, [0 1 0; 0 0 0; 0 1 0], [1 0 1; 1 1 1; 1 0 1] );
L_system_tiling( 'SP', 5,  2, 1, 0, '', 0, [0 2 1; 0 4 1; 0 3 1], [1 3 0; 1 5 0; 1 2 0] );
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [1 0 0; 0 1 0; 0 0 1], [0 1 1; 1 0 1; 1 1 0] );
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [3 0 0; 0 3 0; 0 0 3], [2 1 1; 1 2 1; 1 1 2] );

L_system_tiling( 'test', 5, 2, 1, 0, '', 0, [0 1 0 0; 0 1 1 1; 1 1 1 0; 0 0 1 0], [ 1 0 1 1; 1 0 0 0; 0 0 0 1; 1 1 0 1 ] );

L_system_tiling( 'test', 5, 2, 1, 0, '', 0, [0 0 0 0; 0 1 1 0; 0 1 1 0; 0 0 0 0], [ 1 1 1 1; 1 0 0 1; 1 0 0 1; 1 1 1 1 ] );

L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [0 1 0; 0 1 0; 0 0 0], [1 0 1; 1 0 1; 1 1 1] );

L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [2 1 2; 2 2 2; 2 1 2], [1 1 1; 1 1 1; 1 1 1] ); % monohedral tiling
L_system_tiling( 'test', 6, 3, 1, 0, '', 0, [1 2 2; 2 1 2; 2 2 1], [0 3 0; 2 2 3; 2 2 0], [2 2 2; 2 2 2; 2 2 2] );
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [0 3 0; 0 0 0; 0 3 0], [1 2 1; 1 1 1; 1 2 1] );
L_system_tiling( 'HX, 6, 2, 1, 0, '', 0, [0 1 0; 0 0 0; 0 1 0], [1 0 1; 0 0 0; 1 0 1] );
L_system_tiling( 'test', 5, 2, 1, 0, '', 0, [1 0 0; 0 1 0; 0 0 1], [1 1 0; 1 0 1; 0 1 1] );
L_system_tiling( 'test', 5, 2, 1, 0, '', 0, [1 0 0; 0 1 0; 0 0 1], [0 0 1; 0 1 0; 1 0 0] );
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [1 0 0; 0 1 0; 0 0 1], [1 1 0; 1 0 1; 0 1 1] );
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [1 0 0; 0 1 0; 0 0 1], [0 1 0; 1 0 1; 0 1 0] );
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [0 0 1; 1 0 1; 1 1 0], [1 1 1; 1 1 1; 1 1 1] );
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [0 0 1; 1 0 0; 1 1 0], [1 1 1; 1 1 1; 1 1 1] );
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [0 0 0; 1 0 0; 1 1 0], [1 1 1; 1 1 1; 1 1 1] ); % Seirpinski
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [0 0 0; 0 0 0; 1 0 0], [1 1 1; 1 1 1; 1 1 1] );
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [1 1 0; 1 0 1; 0 1 1], [1 0 0; 0 1 0; 0 0 1] );

L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [0 0 1; 1 0 1; 1 0 0], [1 1 1; 1 1 1; 1 1 1] ); % Terminating

L_system_tiling( 'X', 6, 2, 1, 0, '', 0, [0 1 0; 1 0 1; 0 1 0], [1 1 1; 1 1 1; 1 1 1] );
L_system_tiling( 'HI', 6, 2, 1, 0, '', 0, [0 1 0; 0 0 0; 0 1 0], [1 1 1; 1 1 1; 1 1 1] );
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [6 0 1; 1 8 1; 1 10 2], [1 1 1; 1 1 1; 1 1 1] ); % Hairy boundary
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [0 6 4; 2 1 1; 4 1 1], [1 1 1; 1 1 1; 1 1 1] );
L_system_tiling( 'test', 5, 2, 1, 0, '', 0, [4 6 4; 1 1 2; 1 1 4], [1 1 1; 1 1 1; 1 1 1] );
L_system_tiling( 'test', 5, 2, 1, 0, '', 0, [0 0 0; 1 1 6; 1 1 0], [1 1 1; 1 1 1; 1 1 1] );
L_system_tiling( 'test', 5, 2, 1, 0, '', 0, [0 6 0; 1 1 2; 1 1 0], [1 1 1; 1 1 1; 1 1 1] );




L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [0 0 0; 0 1 0; 0 0 0], [0 0 0; 2 1 0; 2 2 2], [2 2 2; 2 1 2; 2 2 2] );
L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [0 0 0; 0 1 0; 0 0 0], [0 2 0; 1 1 1; 2 0 2], [2 2 2; 2 1 2; 2 2 2] );
L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [0 0 0; 0 1 0; 0 0 0], [0 2 0; 0 1 2; 2 0 2], [2 2 2; 2 1 2; 2 2 2] );
L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [0 0 0; 0 1 0; 0 0 0], [0 0 2; 2 1 2; 2 0 0], [2 2 2; 2 1 2; 2 2 2] );
L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [0 0 0; 0 2 0; 0 0 0], [0 0 2; 2 1 2; 2 0 0], [2 2 2; 2 0 2; 2 2 2] );
L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [0 0 0; 0 1 0; 0 0 0], [0 0 1; 0 1 2; 1 2 2], [2 2 2; 2 1 2; 2 2 2] );
L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [0 0 0; 0 2 0; 0 0 0], [0 0 2; 2 4 2; 2 0 0], [2 2 2; 2 0 2; 2 2 2] );
L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [0 0 0; 0 4 0; 0 0 0], [0 0 2; 2 4 2; 2 0 0], [2 2 2; 2 4 2; 2 2 2] );
L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [4 4 4; 4 0 4; 4 4 4], [0 0 2; 2 4 2; 2 0 0], [4 4 4; 4 2 4; 4 4 4] );
L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [4 4 4; 4 2 4; 4 4 4], [0 0 2; 2 4 2; 2 0 0], [4 4 4; 4 0 4; 4 4 4] );

L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [0 2 0; 1 0 1; 0 2 0], [1 0 1; 2 1 2; 1 0 1], [2 1 2; 0 2 0; 2 1 2] );

L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [2 2 1; 1 3 1; 1 2 2], [0 0 2; 2 4 2; 2 0 0], [1 1 0; 0 5 0; 0 1 1] );

L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [1 1 0; 0 0 0; 0 1 1], [1 1 0; 0 1 0; 0 1 1] );
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [3 3 0; 0 0 0; 0 3 3], [1 1 2; 2 1 2; 2 1 1] );
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [1 1 0; 0 2 0; 0 1 1], [0 0 1; 1 3 1; 1 0 0] );
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [1 1 2; 2 2 2; 2 1 1], [0 0 3; 3 3 3; 3 0 0] );
L_system_tiling( 'test', 6, 2, 1, 0, '', 0, [1 1 2; 2 2 2; 2 1 1], [3 3 0; 0 3 0; 0 3 3] );

L_system_tiling( 'test', 6, 4, 1, 0, '', 0, [1 1 0; 0 0 0; 0 1 1], [2 2 1; 1 1 1; 1 2 2], [3 3 2; 2 2 2; 2 3 3], [0 0 3; 3 3 3; 3 0 0] );
L_system_tiling( 'test', 6, 4, 1, 0, '', 0, [1 1 0; 0 0 0; 0 1 1], [1 1 2; 2 1 2; 2 1 1], [3 3 2; 2 2 2; 2 3 3], [3 3 0; 0 3 0; 0 3 3] );

L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [0 0 0; 0 0 0; 0 0 0], [0 2 0; 0 1 2; 2 0 2], [2 2 2; 2 2 2; 2 2 2] );
L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [0 0 0; 0 0 0; 0 0 0], [0 0 0; 0 1 2; 2 2 2], [2 2 2; 2 2 2; 2 2 2] );
L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [0 0 0; 0 0 0; 0 0 0], [0 0 0; 0 4 2; 2 2 2], [2 2 2; 2 2 2; 2 2 2] );
L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [0 0 0; 0 0 0; 0 0 0], [0 0 0; 0 7 2; 2 2 2], [2 2 2; 2 2 2; 2 2 2] );
L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [0 0 0; 0 0 0; 0 0 0], [0 0 0; 0 10 2; 2 2 2], [2 2 2; 2 2 2; 2 2 2] );
L_system_tiling( 'test', 6, 3, 1, 0, '', 1, [0 0 0; 0 0 0; 0 0 0], [0 0 2; 2 1 2; 2 0 0], [2 2 2; 2 2 2; 2 2 2] );

L_system_tiling( 'BF', 9, 4, 1, 0, '', 0, [0 2; 2 0], [0 3; 3 0], [1 2; 2 1], [1 3; 3 1] ); % Dragon curve (paper folding) sequence
L_system_tiling( 'BF', 9, 4, 1, 0, '', 0, [10 12; 12 10], [10 13; 13 10], [11 12; 12 11], [11 13; 13 11] );


% Diagonal systems
L_system_tiling( 'BF', 8, 4, 1, 0, '', 0, [0 11; 11 0], [12 10; 10 12], [13 10; 10 13], [11 10; 10 11] );
L_system_tiling( 'BF', 9, 4, 1, 0, '', 0, [0 11; 11 0], [10 12; 12 10], [10 13; 13 10], [10 11; 11 10] );

L_system_tiling( 'BF', 9, 8, 1, 0, '', 0, [1 4; 4 1], [0 5; 5 0], [13 16; 16 13], [12 17; 17 12], [13 10; 10 13], [12 11; 11 12], [15 13; 13 15], [14 12; 12 14] );
\



References

Plane filling curves, Cut-the-knot

Walter Wunderlich's (3rd) Peano curve variation

Sagan, Space-Filling Curves, Springer-Verlag, 1994

SquaRecurves, E-Tours, Eddies, and Frenzies: Basic Families of Peano Curves on the Square Grid
Douglas M. McKenna
A chapter from The Lighter Side of Mathematics - Proceedings of the Eugene Strens Memorial Conference on Recreational Mathematics and its History, Math. Assoc. of America, 1994


Tag-systems for the Hilbert curve
Patrice Séébold
Journal of Automata, Languages and Combinatorics

Hilbert words correspond to finite approximations of the Hilbert space filling curve. The Hilbert infinite word H is obtained as the limit of these words. It gives a description of the Hilbert (infinite) curve. We give a uniform tag-system to generate automatically H and, by showing that it is almost cube-free, we prove that it cannot be obtained by simply iterating a morphism.


Graphical applications of L−systems
Przemyslaw Prusinkiewicz

A new method for generating pictures is presented and illustrated with examples. The idea is to generate a string of symbols using an L−system, and to interpret this string as a sequence of commands which control a "turtle". Suitable generalizations of the notions of the L−system and of a turtle are introduced. The resulting mathematical model can be used to create a variety of (finite approximations of) fractal curves, ranging from Koch curves, to classic space−filling curves, to relatively realistic−looking pictures of plants and trees. All these pictures are defined in a uniform and compact way.

------------------------------------
 Public Domain DedicationThis work is dedicated to the Public Domain.
There are no restrictions on use of the text, images or code 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).