A center of approximate 8-fold rotational symmetry is near the lower left corner. Large brown patches appear at roughly equal distances. They lie at corners of squares, rhombs with an acute angle of 45 degrees and regular octagons. These polygons bear similar decorations. Overall this image seems to be an approximate decoration of the Ammann-Beenker tiling. This is no surprise as a simple superposition of sinusoidal waves too makes a decoration of the Ammann-Beenker tiling, see my post “Quasiperiodic pattern from eight waves and the Ammann-Beenker tiling”.

]]>

For even p the unit vectors are

Note that

Rotations are similar to the case of an odd number of dimensions, but we consider here multiples of π/p. To get an image with rotational symmetry we have to sum up a full cycle of 2p rotated basic mapping functions, like that:

where the basic mapping function X(x,y) usually is not symmetric.

Rotating the first unit vector clockwise by π/p now gives the opposite of the last unit vector:

Using

we get

Observe that we have exponential functions of imaginary arguments that come in pairs with opposite signs. This simplifies to

This gives mapping functions from special choices for the wave vector components. With a basic mapping function of only one non-zero component of the wave vector

we get the same symmetric function as for embedding spaces with an odd number of dimensions:

But for the second part of the mapping function Y we now cannot use sine functions. Instead, we can use a basic function with two non-zero wave vector components

resulting in the symmetric mapping function

You best make a drawing of these vector combinations to see the rotational symmetry.

With these mapping functions we easily generate quasi-periodic designs with a rotational symmetry which is a multiple of four.

]]>

(1, 0), (-½, ½√3) and (-½, -½√3).

They are isometric projections of the three coordinate axis and form a triangular lattice. You do not need to use all three vectors. Often, one replaces the third unit vector by

(-½, -½√3) = – (1,0) – (-½, ½√3).

But for creating designs with three-fold rotational symmetry it might be better to use all three vectors. Then, the symmetry becomes obvious. Similar to the previous post, the simplest mapping functions with three-fold rotational symmetry are

X(x,y) = cos(x) +cos(-½ x+½√3 y) +cos(-½ x -½√3 y) and

Y(x,y) = sin(x) +sin(-½ x+½√3 y) +sin(-½ x -½√3 y).

This results in images like that:

As input image I used a photo of a rosechafer on sedum spectabilis. The green and rose shapes result from the flower. The shiny yellow and blue shape is part of the body of the insect. At the ends you can discover its head.

A minstrel bug and different mapping functions give

]]>

X(-x,-y)=X(x,y) and Y(-x,-y)=Y(x,y). Let’s consider space with an odd number p of dimensions and look at the earlier post “Rotational symmetry from …“. There we got a p-fold rotational symmetry with rotation by multiples of 2π/p that leave X and Y unchanged. The inversion is simply a rotation by π. Both together give that X and Y are invariant upon rotation by π/p. You can easily verify that, if you take into account that p is an odd number. Thus we get designs with a 2p-fold rotational symmetry.

To create such designs we use that only the cosine function is an even function and does not change if the sign of its argument changes as cos(-x)=cos(x). Thus only cosine waves make up the mapping functions X and Y if we impose inversion symmetry. Taking care to use functions that are not multiples of each other, we get from 5-dimensional space drawings like this:

Here the center of perfect 10-fold rotational symmetry lies near the lower left corner. Look out for shapes with approximate local 5-fold and 10-fold rotational symmetry.

Using an embedding space with an odd number of dimensions we cannot make designs with a rotational symmetry that is a multiple of 4. They result from an even number of dimensions as I will show in a following post.

]]>

I used the simplest quasiperiodic mapping functions resulting from the theory of the last post

and

The center of perfect 5-fold symmetry is near the lower left corner. Further out you can recognize the head of the caterpillar. At higher magnification you see more clearly how the caterpillar is “anamorphized” into a quasiperiodic image:

To see the quasiperiodicity we need the image of a larger region. Here is the result from an image of a fly on Muscary flowers:￼

Do you see the various 5-pointed stars and how they are approximately repeated at other places?

Note that these images are mirror symmetric with respect to the x-axis going through the center of perfect rotational symmetry. Actually, it is difficult to create images that are not mirror symmetric. That is quite different to rosettes.

If you want to experiment then look at my public Github repository: https://github.com/PeterStampfli/creatingSymmetries. It has the code for generating images like that and much more. Start with: warpingKaleidoscope.html. Your comments and improvements are welcome. Keep in mind that this is a moving target.

]]>

where* h* goes from 1 to *p*. Note that they are mirror symmetric at the x-axis as

To simplify we set ζ=0 and expand the argument of the exponential function, then the mapping functions become

and similar for *Y*. To get a p-fold rotational symmetry we have to look at rotations by an angle of 2π/p. This results in

Because the angle between the unit vectors is 2π/p we have

and we get

To create a mapping function X with p-fold rotational symmetry we add up functions rotated by multiples of 2π/p

This results in

which is equal to the condition

This is not really surprising. It means simply that we have to shift around the components of the wave vector *k* resulting in different waves that have to be summed up. For programming we use real valued functions and coefficients. Then

and similar for the other component *Y *of the mapping function.

]]>

I am writing vectors of unit length and an angle α with the x-axis like that:

The position (x,y) of a pixel in the output image can then be written as a vector

where I am essentially using polar coordinates. *r* is the length of the vector and φ its angle with the x-axis. The scalar product is then

We now look at rotations. They are matrices

where Δ is the angle of rotation. A rotation changes the angle of a vector

and it changes the value of scalar products

This is almost trivial. The scalar product of a rotated vector with a second vector is the same as the scalar product of the original vector with the second vector rotated by the opposite angle. But this becomes important when we look at rotational symmetry and color symmetries.

Mirror symmetry is similar. The mirror image of (x,y) using the x-axis as mirror axis is (x,-y). As a matrix we have

and thus we can write

and the scalar product changes like this

As expected, the scalar product of the mirror image of a vector with another vector is the same as the scalar product of the original vector with the mirror image of the second vector.

Inversion changes a vector into its opposite. It is simply a rotation by 180 degrees. Using radians for angles

and the above relations for the scalar product of rotated vectors apply too.

This is it. The short notations for rotations and mirror symmetry will be useful in further discussions.

]]>

Let’s begin with a *p*-dimensional space. To avoid confusion I am using Greek letters for its vectors and components:

We have the usual vector product for *p*-dimensional space:

For vectors in the two-dimensional plane of the resulting image I am using Latin letters.

The periodic decoration of the p-dimensional space results from a mapping to the two-dimensional space of the input image. Its X-component is a Fourier series

where the A with integer indices k are complex coefficients. We can write a *p*-dimensional wavevector of integers

and simplify the equation for X

Obviously, the Y-component of the mapping is essentially the same

Both X and Y have real values and thus their coefficients for opposed wavevectors are complex conjugates

and similarly for the B’s.

We now place the plane of the output image in the *p*-dimensional space. A point with output coordinates (x,y) has in the full *p*-dimensional space the coordinates

are vectors of the *p*-dimensional space. The mapping to the input image gives

which we can reorder to

We then define new vectors in the output plane

where *h*=1, 2, … , *p*. Thus

where

We rewrite this to use real valued coefficients and functions. Thus

Similarly we get

The coefficients a, b, c, d and the vectors e together with the input image make the output image and its symmetries. There are many different choices, which I will discuss in following posts.

]]>

First, we separate the pixel color in a grey part and a pure color part. The grey part is given by the smallest of the three pixel color components:

grey=min(red,green,blue).

We subtract this value from the red, green and blue components. One of these values is then equal to zero. The larger of the other two values is the intensity of the color part:

intensity=max(red,green,blue)-grey.

Finally, we have to define a numerical value for the hue to characterize the color. The hue is cyclic. We can assign the value 0 to red, going to yellow for 1, green for 2, cyan for 3, blue for 4, magenta for 5 and then comes red again for 6. For intermediate colors we use an interpolation that comes directly from the color components. As an example, subtracting grey the pure red has color components

red-grey=intensity, green-grey=0, blue-grey=0

and the pure yellow is made of

red-grey=intensity, green-grey=intensity, blue-grey=0.

For intermediate colors like orange the hue is given by

hue=(green-grey)/intensity.

Similarly, we get the value for the hue of other colors. That’s how to calculate the values of grey, intensity and hue parameters from the red, green and blue channels and inversely.

To transform the color of a pixel we get first the grey, hue and intensity values from its red, green and blue channels. Then we change the hue. For an n-color symmetry we would add 6/n. Finally, we calculate the values for red, green and blue channels using the new value of the hue.

We can do other color manipulations too. Here, a minstrel bug with red and black stripes becomes a rainbow bug:

]]>

This 3-color symmetry together with a six-fold rotational symmetry gives results like this:

The mapping of the color symmetry is simply W(z)=z². Here I added a dark border between the different sectors of the color symmetry. Admittedly, this is merely a proof of concept and not very interesting. Color symmetries become more useful in periodic and quasi-periodic kaleidoscopes.

]]>