Exploring Artlandia

(Artlandia^®) Demo Series

Copyright © 1998-2001 by Artlandia, Inc. This notebook demonstrates some of the designer tools available in Artlandia. The notebook may be copied or distributed freely, as long as it is distributed in its entirety. All other rights reserved. In particular, reproduction of individual images without the prior written permission of the copyright holder is expressly prohibited. Questions and comments are welcome at info@artlandia.com. More information about Artlandia and related products is available at http://www.artlandia.com. For more information about the Graphica books visit http://www.graphica.com. Artlandia is a registered trademark of Artlandia, Inc. Graphica is a trademark of Wolfram Media, Inc. All other product names are trademarks of their producers. The notebook is based on the article by the same title in Mathematica in Education and Research, 1998, V. 7, No. 4.

The Violet Kiss Image

A variety of forms can be readily generated in Artlandia by using the supplied library of curves and transforms. For this design, we put side by side a random selection from a subset of the available curves.

Start by loading Artlandia and setting a convenient option for Graphics.

<< Artlandia`

SetOptions[Graphics, AspectRatio -> Automatic];

This holds a few predefined curves.

curves  =  
        Hold[Parabola[], Hyperbola[], SemicubicParabola[], DioclesCissoid[], 
          AgnesiWitch[]];

This selects several curves and puts them side by side.

length  =  4;

Show[
      ArrayGraphics[{
          Array[Graphics[Line[RandomElement[curves] // N]]&, length]}, 
        GraphicsSpacing -> - .05]]

Putting shapes together can be accomplished using the built-in Mathematica function GraphicsArray and then the resulting GraphicsArray object can be cast into Graphics. The Artlandia function ArrayGraphics performs this task in a transparent fashion. Additionally, it scales the individual Graphics objects in the array to put them on the plot without enclosing rectangles.

This defines the utility function that scales the Graphics object so that it fits a square.

ToSquare[graphics_] := 
      Scale[graphics, 
        1/(Last[#] - First[#]&/@FullOptions[graphics, PlotRange])]

We then pick up the curves (the Line graphics primitives) from the graphics for further processing.

lines = Cases[ToSquare[%%],_Line,Infinity];

Show[Graphics[lines]];

This defines and displays the color palette for the image.

palette  = {Red, Gold, Purple, MidPoint[{MistyRose, Purple}]};

ColorBar[palette, OrderingFunction -> None];

To paint the lines we pair each line with a color directive. To create a list of colors of the length length, we cycle the palette colors. Coincidentally, the number of colors and the number of lines are the same, but had they differed, Cycle would have equalized the length of the arrays.

This colors and displays the lines.

clines  =  Transpose[{Cycle[palette, length], lines}];

Show[Graphics[clines]];

We now create solid-color gradients between the lines, something that can be easily accomplish using the Artlandia function ContourTransition and the Polygons value of the option TransitionType. In fact ContourTransition can create many other interesting effects, including the ones featured on the Fall 1995 MathUser cover.

This partitions the colored lines in groups of two.

plines  =  Partition[clines, 2, 1];

Let each transition consist of 10 steps.

steps  =  10;

This creates color gradients.

solids  =  
        Apply[ContourTransition[##, steps, 
              TransitionType -> Polygons] &, plines, {1}];

Show[Graphics[solids]];

Some more details are added as traversal lines, or "dashes", using another ContourTransition option. As the lines are the same in the preceding and following inputs, a coordination in position and color between solids and dashes arises.

Dashes are created using the same function ContourTransition and different value for the option TransitionType.

dashes  =  
        Apply[ContourTransition[##, steps, 
              TransitionType -> TraversalLines] &, 
          plines, {1}];

The motif (the basic element of the design) is created by overlapping the solid gradients and the dashes.

motif = Show[Graphics[{solids, dashes}]];

On the next step, we spread the motif over the plane using Artlandia's tiling tools that easily generate symmetrical patterns of the seventeen plane groups (also known as the wallpaper groups). The elementary units of tilings are represented as the graphics "superprimitives", or structured primitives. These can be used in Graphics similarly to all other Mathematica graphics objects.

Among several available options, Artlandia allows the user to specify the control points that form the unit cell (the fundamental repeated domain). It is also possible to switch between several boundary effects, namely, drop the graphics primitives that intersect the boundary of the unit cell, include them, or trim them at the boundary.

In the following inputs we specify the control points, show them on the graph, and make the tile of the symmetry group 𝓅4ℊ (that is 4*2; Artlandia functions take both the standard crystallographic and the Conway notation; there is also a simple way to specify any arbitrary notation). Finally, we construct a 2 × 2 tiling from our tile and zoom into its central part to complete "The Violet Kiss".

These are the selected control points for the design.

points  =  {{0.458943,  0.164167},  {0.83839,  0.622011}};

Show[Graphics[{clines, {Red,  PointSize[ .02], Point/@points}}]];

This forms a unit of repetition, the tile. We choose to retain all the graphics primitives that intersect the boundary.

tile  =  
      Tile[motif, 𝓅4ℊ, ControlPoints -> points, 
        Boundary -> True]

This constructs a 2 × 2 tiling.

tiling  =  Show[Tiling[tile, {2, 2}], PlotRange -> All];

Finally, we zoom-in on the center of the image.

Zoom[tiling, { .525,  .7}];

Hundreds of like—and unlike—designs can originate from virtually the same Artlandia program, partly because of the built-in random generators in Artlandia functions, but also because of the overall design of the application. This makes the Artlandia user productive and the Artlandia experience fun. As an example, here is another design generated from the same algorithm with only trivial changes of parameters and options.