My experiments with non-repetitive patterns were based on the use of a unique form, repeated and rotated or flipped, arranged to create unique combinations, according to a recursive logic.

The present experiment simulates a society where spontaneous order emerges, so the graphic space must be populated by shapes, or graphemes, all different from each other, because all the persons who constitute a society are unique. The graphic space must also be occupied following general rules, metaphors of society’s laws, and local rules, metaphors of personal relations, then the resulting images are studied in relation to the weights given to the general and local rules.
As I work with compositions of hundreds of objects, I first created a few graphemes and multiplied their number by rotations and flips as I did in the previous generation (2006).

Sketches of 5x5 graphemes

Sketches of 5x5 graphemes

While typing the coordinates of each point into lines of the code that will draw the grapheme, I understood how to write the program that could do it. I was working with a five by five matrix of points, a total of twenty-five points. The lines drawing the grapheme go from one point to another neighbor point, these lines can be horizontal, vertical or diagonals, all can be straight, or convex curves, or concave curves. A grapheme is created by an uninterrupted sequence of lines that ends at the same point it started, and which doesn’t cross each other when all the lines are straight.
So I wrote the program that creates the graphemes, and saves their simplified description in a file on the drive. I still do not know how many different graphemes I could get from a five by five matrix. After hours of intensive computation, the program was unresponsive, but working hard, I killed it and added instructions to let it tell me how far it would be in the execution of the task. I launched it again, and 24 hours later, it had only begun the task.
So I reduced the size of the matrix to four by four, and after solving many more problems I obtained more than six million different graphemes.

Page of a catalogue of 4x4 graphemes

Page 6742 of 13344 pages of a catalog of the subset of graphemes from a four by four matrix, where only oblique lines can be curved.



To fill a graphic space of 25 squares by 25 squares, I need 625 different graphemes, chosen according to general rules and local rules. To make a choice among the candidates according to local rules for a given square, existing neighbors must be compared to all the candidates to find the one that is the best according to local and general rules. If the general rules have the effect to limit the number of candidates to one sixth of the six million, there will be one million candidates, so one million comparisons according to several rules, these results compiled to find one new neighbor.

To select 624 graphemes among a million candidates requires a lot of computations, considerably extending the cycle idea—> code—> result—> analysis.

So I scaled down to a matrix of three by three, which gives me 9607 different graphemes, coming from 223 families. By family, I mean all the graphemes coming from a unique path. A path, because it is like a walk from one point to another without crossing its path, and ending at the starting point. There are 223 paths in a three by three matrix, whatever the starting point. Paths that walk by the same points in the same order or in reverse, whatever the starting point, are the same in this study. They become differentiated by the way they are drawn.


9607 graphemes from a three by three matrix.




In my paths, points are linked by straight lines, or convex curves, or concave curves. The set of the different graphemes (different by the variations of the oblique segments) coming from the same path constitutes a family.
So the three by three matrix gives me 9607 different graphemes belonging to 223 families, some are placed around a first grapheme arbitrarily chosen at the center of the graphic space.

Below, an aleatory arrangement gives an idea of a selection without rules.

Example of random generation

Random composition, the only rule, each grapheme must be unique.

The compositions below are built by placing a first grapheme at the center, then by choosing among the other graphemes of the same matrix first a set of graphemes conforming to the general rules, then among this set the best candidate whose attributes conform to local rules of association with existing neighbors of the square. When these rules do not permit to find a candidate, the general rules are softened, and if there is still no appropriate candidate, the square is left empty. The first grapheme, the general and local rules are chosen arbitrarily before the launch of the generation; using the same program build, the same choices of first grapheme and rules will give the same result, the generation is deterministic.



The three images below show the effect of changing the first grapheme while keeping the same rules:

Example of generation Example of generation Example of generation



The three images below show the effect of changing the rules while keeping the same first grapheme :

Example of generation Example of generation Example of generation

As of March 29, 2020, this project, the build number 8742, counts 26109 lines of Swift code, including comments but excluding Apple’s libraries. The program execution is configured and controlled by an interpreted language of 619 words and by a simple graphical interface.