How to generate rosettes

A rosette is an image with rotational symmetry. For p-fold symmetry we can use the methods of the last post “Anamorphosis and symmetries” with a simple power as a mapping function between output and input images:


Here z=x+iy relates to the position (x,y) of a pixel of the output image. We then have to sample the color of the input image at the position (X,Y) given by Z=X+iY. This gives the color of the pixel. With polar coordinates, where r²=x²+y² and tan(φ)=y/x, we see easily that we have p-fold rotational symmetry. Rotating (x,y) by 2π/p changes φ to φ+2π/p and gives the same Z. Thus we get the same color for the pixel at the rotated position.

With p=5 I got this result:


The input image is “Bee on lavender blossom” of my photography blog “looking closer“. I used my program “rosette“, which is an interactive web page. You can download its html and JavaScript files to make your own experiments. To get images of different symmetry you simply have to change the code of the last function: mapping(x,y), see later. Here I choose the “nearest” input image pixel interpolation option, which in fact does not smooth pixels. Thus you can see that some pixels are strongly magnified and distorted at the center of the image because of the large power of r in the mapping function. At the border you see a frieze of five somehow distorted bees following each other.

We can get more interesting images if we use several combinations of z together with its complex conjugate. As proposed by Farris:



where (m-n) has is a multiple of p for p-fold rotational symmetry. For the power of r we can use any integer number resulting in a more detailed center of the rosette. I find it convenient to rearrange these terms and to use real coordinates. Thus




which is convenient for computation and discussing symmetries. Note that k can be any integer and that l is a positive integer. Using fast approximate logarithm and exponential functions we rapidly calculate


We can get more varied images with more detail, such as this one:


Again, I did not use smoothing of pixels.

(Post updated on the 5th June 2017.)

This entry was posted in Anamorphosis, Kaleidoscopes, programming and tagged , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.