Symmetry and symmetry breaking is a central topic of my artistic work. I am fascinated by image tiling as a source of symmetry but until recently the situation was not different than 25+ years ago when my interest started with the Photoshop plugin Terrazzo: There are thousands of known euclidean tilings (Tiling Database) but only the basic 17 wallpapergroups were used for image tiling.
I am working on a general approach to change this: Every image tiling or image pattern in general can be made by one or more proto-tiles (rectangle or masked polygon shaped images with transparency) and a list of clone-, rotate-, mirror- (flip,flop), and translate-commands collected in a CRMT command list. A CRMT interpreter would take such a list and a set of proto-tiles and generate an image tiling, ornament or pattern by step-by-step processing the commands.
For example the following CRMT command list is coding the 14 processing steps to generate a p3m1 tile from a given equilateral triangle proto-tile image (see my p3m1-examples using this CRMT approach on p3m1-CRMT album 1 and p3m1-CRMT album 2):
C0, x0, y0, C0, Fo, R-60, x-1/2tw, y0, C0, Fo, R60, x1/2tw, y0, C0, Fo, R-60, Fi, xtw, y0, C0, Fi, x3/2tw, y0, C0, Fo, R60, Fi, x2tw, y0, C0, Fo, R-60, x5/2tw, y0, C0, Fi, x0, yth, C0, Fo, R-60, Fi, x-1/2tw, yth, C0, Fo, R60, Fi, x1/2tw, yth, C0, Fo, R-60, xtw, yth, C0, x3/2tw, yth, C0, Fo, R60, x2tw, yth, C0, Fo, R-60, Fi, x5/2tw, yt_h
The operation sequence for one proto-tile processing like "C0, Fo, R-60, x-1/2tw, y0" is interpreted as: clone the first (starting with 0) element in the proto-tile list, flop it, rotate it 60 degrees counterclockwise (+ trim), make a translation in x-direction with floor(-1/2tw) where tw is the width of the equilateral triangle, make a translation in y-direction with 0 and then compose the proto-tile over the tile background which is in the p3m1 case a black image with an (2th, 3tw) area were th = 1/2sqrt(3)t_w.
Additionally the CRMT interpreter also needs a list with coordinates for one or more masks that must be draw because the masked proto-tiles must come somewhere; in the p3m1 case the x and y coordinates of the triangle are: xcoord = [0 tw tw/2]; ycoord = [0 0 t_h];
Such an approach is not fast but universal and because of the no-overlap condition of tilings the processing steps for one proto-tile are independent and therefore the 14 steps in the p3m1 case could be made in parallel. And there is always the option to optimize some specific tiling by using some knowledge about its structure. In the p3m1 case run-time can be saved by the knowledge that the lower half is a flipped version of the upper half.
To further develop the CRMT approach I am searching for
1) programmer implementing CRMT interpreter in different environments like Mathematica
Programming a CRMT interpreter seems neither a difficult nor a too costly task because the core is some string processing combined with calling some image processing functions. And if the used environment has RGBA abilities and boundary methods like "-virtual-pixel mirror" (ImageMagick function) or simple inpainting functions it makes everything much easier because composing polygon shaped images results in artifacts at the edges if non-90 degree polygon-masks were used.
There is active development in other environments underway: I have programmed a batch processing prototype in Matlab and a first prototype for a CRMT filter in G'MIC was published this week (G'MIC, discussion about the G'MIC CRMT filter).
2) people writing their own CRMT lists
Every high school kid with basic trigonometry knowledge can determine the angles, lengths and distances in a given tiling image from the Tiling Database to write a CRMT-list without any knowledge of a specific programming language or image processing, so there is potential a huge community. It is only a question of persistence to code even the most complex periodic tilings like Islamic patterns.
Math teachers are often looking for something motivational. Real world applications and aesthetics in math (see Bridges conferences) are mostly the areas they come up with and I think that image tiling is an excellent example for the later. Writing a CRMT command list for a tiling would be a nice assignment if intermediate states could immediately be checked for feedback with a CRMT interpreter. And there is the general question about meaning and sustainability of assignments: Making the first command list for a tile is a meaningful and sustainable activity because such a list can generate aesthetic images even decades later independent of whatever programming languages will be used then for a CRMT interpreter.
Using trigonometry to extract information from given tilings, ornaments and patterns will restrict the audience mostly to academia and math enthusiasts. A much wider audience would be reached with a GUI based system where proto-tiles are placed with drag&drop. Combined with an interaction log that records the relevant actions and a CRMT optimizer that combines all the actions related to one proto-tile to one command set a CRMT-list for a pattern should be reconstructible. I am thinking about modifying this Mathematica demonstration. If in a long-term perspective AI-agents with a learned sense for symmetry and aesthetic can play such a system an endless stream of interesting pattern descriptions would be accessible that can directly be used in every environment with a CRMT interpreter.
The CRMT approach is also extendible in many directions for example by simply adding a new command type like "S" for scaling which makes image types like euclidean Fractal Tiling, Iterated Function Systems and orbit trapping accessible.