I have already explored image transformations using Complex Maps - that is, we treat the final image plane as a complex (or Argand) plane, and then apply to each pixel location a complex mapping function in order to derive a further complex number which is used to reference a point in the original source image.
The inspiration for this comes from the book Creating Symmetry: the Artful Mathematics of Wallpaper Patterns, by Frank Farris. In the Complex Maps series I used a technique from one of the earlier chapters in this book - "Rosette Functions" - modified somewhat to my own requirements. The work discussed on this page uses the methods discussed in a later chapter to produce patterns with "Wallpaper Group" symmetries.
"Wallpaper Groups" are the seventeen "point groups" that classify all the possible symmetries of patterns on a 2D surface. (See the Patterns on a Surface page. )Here, however, we start by selecting a group with 3-fold rotation symmetry. Frank Farris then shows us how to construct a complex mapping function that have the symmetry of this group.
The fundamental idea is to think of a complex wave function expressed in the conventional form exp(2πiy) which is varying in the y direction.To this we can add equivalent waves with directions rotated by 120º and 240º, so producing a function that exhibits the required symmetry. I
Because this is a wave form, it also has translational symmetry as well as rotational symmetry.
Actually, in my first attempts to implement this algorithm the final images (see figure on the right) turned out not to have an obviously apparent 3-fold rotational symmetry. That was the result of adapting the program used in the previous Complex Maps exercise, in which the source image is addressed by an x,y coordinate system with the range (-1,1) in both directions, regardless of whether the original image is square or rectangular. By default in the earlier program I create an output image with the same relative scale as the original. There is a good reason for this: I wanted to see a smooth transition from the undistorted original (i.e. a 1:1 mapping between equivalent pixel locations) and images in which varying amounts of the higher harmonics have been added. I still wanted to be able to do this, by adding an Aoz to the above formula, permitting Ao to be decreased to 0 as other harmonic amplitudes are increased. Getting true threefold rotation will require some careful scaling of coordinates.
As it happens, I tend to think that the unintended results are visually OK, thought they are in fact examples of a different symmetry group. Sometimes I find that perfect symmetry detracts from the aesthetic appeal. Hence, I break the symmetry in two different ways: firstly, by adding in that zeroth harmonic component - the original image; secondly, by applying a function that varies the harmonic amplitudes across the plane of the image. When using this modification we do not see strict translational symmetry; though the primitive cell is still present and uniformly sized a slightly different transformation generates the pattern in each cell. (Frank Harris demonstrates a similar technique in his book, though I apply a different functional form to vary amplitudes.)
- Go to the p3m Wallpaper Symmetry page for a discussion of how to produce images with 3-fold symmetry.
- The p4m Wallpaper Symmetry page deals with 4-fold symmetry
The Processing programs used to produce these images will be uploaded and linked after a little more tuning - in particular getting the true threefold rotation to work when required. It contains the code for producing evolving image sequences, but you need to provide the algorithm that adjusts the transformation parameters through time.
As always, I expect those who use these programs to make some effort to understand how they work. The video sequence actually includes a number of clips produced separately, using different types of transformation. (For example, a simulation of raindrops on a water surface - see right - which is documented separately.)