In this article we demonstrate a method of constructing various types of graphics from polygonal arcs using replacement rules for vertices. The article is based on a presentation entitled “Constructing Graphics from Polygonal Arcs Using Replacement Rules for Vertices” given by the author at the Wolfram Technology Conference in Champaign, Illinois in October 2006.
The simplest type of Lindenmeyer or -system can be used to construct graphics as follows. Two polygonal arcs A1 and A2 are chosen, such that the length of each line segment is an integral multiple of a fixed positive number, , and if a line segment has length , then it is treated as a polygonal arc consisting of line segments of equal length. Also, the angle between each pair of adjacent line segments is an integral multiple of a fixed angle, . A1 is usually chosen as a single line segment or as the boundary of a regular polygon. Each line segment of A1 is replaced by a copy of A2, and then each line segment of the resulting polygonal arc is replaced by a copy of A2, and so on. The constructions are achieved by interpreting certain replacement rules for sequences as replacement rules for line segments .
We present a different method of constructing graphics of the above type that has the advantage that there are no restrictions on the lengths of the line segments of A1 and A2, nor on the angles between adjacent line segments. Also, different replacement rules may be applied to the different line segments of A1, and the code used is straightforward.
More complicated forms of -systems can be used to construct space-filling curves and plant-like forms . The method described in this article does not lend itself to such constructions. Applications of even more complicated forms of -systems called parametric -systems, which place no restrictions on lengths or angles of polygonal arcs, can be found in .
We make simple changes to the given programs in order to generate other interesting graphics.
A Method of Constructing a Polygonal Arc
A polygonal arc is a segmented line connecting a finite sequence of points in the plane. The line may intersect itself and segments of the line may be repeated. The programs described here are based on a method of constructing a polygonal arc with initial point the origin.
A point in the plane at a distance from the origin can be represented by a complex number of the form , real, .
A second point at a distance from can be represented by a complex number of the form , and so on.
To construct a polygonal arc, , with vertices represented by the sequence of complex numbers , we apply operations on lists to the sequence .
We then calculate the coordinates of the points and join them in order with Line or ListPlot. With this method of construction, the polygonal arc is determined by the sequence .
We can then apply replacement rules to the sequence , and hence to itself.
For example, we construct the polygonal arc with initial point the origin and other vertices determined by the sequence , where and are arbitrary.
Applying Replacement Rules to a Line Segment
Consider the function rA.
The sequence determines a polygonal arc consisting of a single line segment, , starting at the origin. The list inside rA determines a replacement rule for .
The resulting arc, , is called the initial arc. We apply a nesting process in rA, choose values for and , and interpret the resulting sequence as a polygonal arc. The nesting process replaces by a (possibly scaled) copy of , and then each segment of by a copy of itself, and so on. The function arcRep can be used to apply the replacement rule determined by r repeatedly to a line segment. Also opts can be used to determine a graphics option if needed.
If the zero in the definition (the second argument of FoldList) is replaced by , the starting point of the arc becomes .
Here rA is nested four times.
Notice that the above graphic is covered by seven (approximately) similar copies of itself. In the first three graphics, as can be seen from the axes, the larger the number of iterations, the larger the graphic in real terms. From now on, except in one case, we omit axes.
In the rest of this article, we will construct a dozen or so variations of the function rA by changing the list involving and . To automate this, we define the function defineRule. Its first argument is the function name (like rA) and its second argument is a list.
In the following example, we use a nonsymmetric rewriting rule.
As before with rA, this recovers the list.
We remark that the entry in the replacement rule rB has the effect of doubling angles.
In the case , there is no rotation.
A polygonal arc constructed by the above method may be rotated, scaled, and in some cases, reflected, using variations of its defining replacement rule.
A reflection will not be obtained unless the entries in the replacement rule are all real. However, in such a case, a different replacement rule may be constructed to effect a reflection.
Applying Replacement Rules to the Segments of a Polygonal Arc
We use Join to concatenate a list of replacement rules and so concatenate the resulting polygonal arcs. The function arcJoin defined here can be used to construct a sequence of concatenated polygonal arcs when x is replaced by a sequence of replacement rules.
In the following example, we apply a replacement rule to the edges of a right isosceles triangle.
In the following example, we apply a replacement rule to each side of a line segment.
In the following example, we apply a replacement rule to each side of the edges of a square.
We apply the replacement rules rG and alternately to the edges of a square.
In the following example, we alternate rH with four and with three iterations.
In the following example, and we alternate -rH with four and rH with three iterations.
The following example illustrates the use of Reverse to obtain a symmetric image from a nonsymmetric replacement rule.
Here is a variation.
Interesting graphics may sometimes be constructed using replacement rules of the following type.
The function defineRule only works with lists, so for rJ we go back to the style of definition used for rA.
In spite of the result for , the replacement rule rJ1 does not generate the above graphic.
Replacement Rules with Constant Entries
A rewriting system may contain constant entries, which are not affected by iterations. This means that one or more of the line segments of the initial arc remain unchanged after iteration.
This sometimes gives a tiling of the plane.
Here is a variation.
Applying Polygon to a List of Vertices
The polygonal arcs constructed by the above method do not always form the boundary of a polygon. However, interesting graphics may sometimes be obtained by applying Polygon to the list of vertices. The function poly defined below can be used to construct such a graphic.
In this example, Polygon is applied to the vertices of an arc that is neither closed nor symmetrical.
Here is a variation.
The entries in our very first replacement rule rA are not all real.
Define rA1 by replacing I by .
The replacement rule may be used to generate polygonal arcs that are reflections of those generated by rA and similarly for rA1 and .
We illustrate by means of the following example, in which we apply the replacement rule to two sides and rA to the third side of an equilateral triangle.
Here is a variation.
In the following example, we apply the replacement rule rA1 to the sides of a regular hexagon.
Here is a variation.
|||M. Trott, The Mathematica GuideBook for Graphics, New York: Springer-Verlag, 2004.|
|||P. Prusinkiewicz and A. Lindenmayer, The Algorithmic Beauty of Plants, New York: Springer-Verlag, 1990.|
|J. Helmstedt, “A New Method of Constructing Fractals and Other Graphics,” The Mathematica Journal, 2011. dx.doi.org/doi:10.3888/tmj.13-4.|
About the Author
Janet Helmstedt was a lecturer in the Department of Mathematics of the University of the Witwatersrand, Johannesburg, South Africa. She is coauthor with Chonat Getz of the book Graphics with Mathematica: Fractals, Julia Sets, Patterns and Natural Forms.
30 Meyer Street
Johannesburg, 2192, South Africa