The variety of ornament is enormous. The different patterns created by artisans represent their culture, times and their own individual taste. Much study of ornament has profitably come from a mathematical and computational perspective. In particular the symmetry of tilings is a well-developed fields. Islamic star patterns created well before the mathematical study of pattern can be understood and classified using relatively recent mathematical notions of symmetry.
However, there are a number of characteristics of rendering that aren't captured by current classifications. In particular the details of turning a schematic view into a fully-rendered image. My goal is to make a software tool that lets you design and render interlace patterns with the potential to reproduce the variety seen in historical examples.
In particular I want to create attractive patterns based on the standard straight-line star patterns, but enhanced with curved lines. Instead of simply letting the user draw the curves I have a higher-level constraint-based approach in mind. The user specifies geometric constraints like: vertex a should be sharp, or the curves should meet at vertex A at an angle of 45 degrees. The program derives a pattern that meets these constraints using generally smooth (except a the the specified exceptions), nice curves. In Figure 1 you can see an simple example of how a pattern will change depending on the user-specified constraints.
The concept of a smooth and "nice" curve can be formalized using the concept of a fair curve from the calculus of variations. A fair curve minimizes a functional, or some measure of the energy along the curve. This technique of computer-aided design is motivated by historical practice in design, where physical elements like pieces of wood were used to generate shapes. A piece of wood attached at several points will form a curve that minimizes its strain energy. I use the functional from [Moreton 1992], the squared magnitude of the derivative of curvature. This generates minimum variation curves.
Using finite differences I calculate an approximation of the derivative of curvature for a piecewise linear curve. Then I use gradient descent to adjust the vertices of the piecewise linear curve to minimize the functional. In order to specify that a vertex remain stationary I can use the projection method of constrained optimization and simply not move it. In order to specify that a vertex is sharp, I simply ignore derivative of curvature approximations which include elements from both sides of the curve, effectively breaking the curve into two segments. And the final user-specified constraint, setting the angle that two curves should meet at a sharp vertex is enforced by adding an additional force that penalizes departures from the constraint. This penalty-method approach has the disadvantage that it doesn't satisfy the constraint exactly, but it had the advantage of simple implementation. In order to speed up the optimization I begin with a low resolution curve and go through some gradient descent steps before subdividing the curve and repeating.
The movies linked to from Figure 1 show the the optimization process proceeding from the initial star given two different sets of user specified constraints. The red squares are the vertices. They increase in number after a subdivision step.
Figure 1 From left to right: (a) A six pointed star. (b) The derived pattern with no user constraints. (c) The derived pattern with the star tips set to be sharp and have an angle less than 60 degrees. Click on the second and third images to see a movie showing the optimization process.
I've applied this process to some more complicated examples of Islamic star pattern tilings. I begin with three different patterns and apply a few differents sets of constraints to them to demonstrate the enormous variety of effect that can result from one underlying pattern. Please click on the images to see a larger version.
Figure 2 From left to right: (a) Original pattern. (b) Derived pattern with no constraints. (c) The corner (with angle 135 originally) is given a target angle of 90 degrees (d) The corner is again given an angle of 90 degrees, and also kept stationary.
Figure 3 From left to right: (a) Original pattern. (b) Derived pattern with no constraints. (c) Corner given target angle of 90 degrees. Note that this constraint can be met with straight lines, and is, because straight lines have zero curvature and therefore minimize our functional. (d) Given a target angle of 90 degrees and kept stationary we get curves.
Figure 4 From left to right: (a) Original pattern. (b) Derived pattern with no constraints. (c) Square corners (originally 90 degrees) constrained to be 60 degrees and held stationary. (d) Square corners constrained to be 60 degress, but allowed to move. (e) Inner corner of five-pointed star held sharp. Note that when the points of the eight-pointed star are held sharp the eight-pointed star is highly emphasized and the five-pointed star is de-emphasized. If we keep the corner around the five-pointed star sharp we do the reverse and get a very different feel.
Given a single star pattern I have demonstrated that a true variety of attractive patterns can be created. A program that incorporated the sort of rendering options that I have begun to explore here would multiply the fun of exploring symmetry and tilings an additional factor. The present work requires editing an terse text file to adjust constraints or writing a small program, neither of which encourage rampant experimentation.
I would like to extend this work to have a graphical interface to apply constraints so that it could appeal to a wider user-base. I'd also like to create some animations of how knots change as parameters are adjusted.
[Moreton 1992] Henry Moreton and Carlo Sequin. Functional minimization for fair surface design. Proceedings of SIGGRAPH 1992.