CS 791: Assignment 3 - Tilings and Islamic Star Patterns


Overview

This webpage describes my implementation for question 5 of the assignment for creating Islamic Star Patterns. The report is organized as follows:

Implementation

My implementation for this assignment was developed under Windows XP using C#, which was chosen due to my greater familiarity with UI development and prior experience with XML libraries using C#. For interactive rendering I used the SharpGL OpenGL class library for C# (with some minor modifications by me to support the glu tesselator). Vector output was produced using a custom created SVG writer using the SVG specs as a reference.

Interface

The user interface for the implementation is shown below:

The File menu contains options to load an XML file containing tiling descriptions, write the current star pattern as an SVG file and quit. All other options are available through the panels at the bottom. The tree view on the left lists the tilings that have currently been loaded.

In the constructions box, the tiling alpha and star alpha slides control the transparency with which the lines for the tiling and the basic star pattern lines are drawn. The contact angle slider and number spin box control the contact angle and the contact delta slider controls the separation between rays for two-point patterns. The checkboxes at the bottom toggle the display of contact and intersection points (for debugging purposes) and allow the tiling and star lines to be turned off (primarily for smaller SVG files).

In the rendering box, the fill colours for the star and other polygons can be set, and the same for the ribbons. (The swap button swaps the two polygon fill colours.) The ribbon width slider allows the width of ribbons to be changed dynamically and the check boxes allow rendering of ribbons and polygons to be disabled. The drop-down box is used to select the interlacing type for the ribbons which can be none, even or odd (even/odd swaps the over-under relation).

Algorithm

Hankin's basic "polygons-in-contact" method, described in Kaplan's paper, is implemented.

Implementation Overview

Without getting into the nitty-gritty details, here's a basic summary of the main implementation classes:

Other classes in the implementation handle the UI, provide some simple point and vector math, and store render properties.

Known Issues

There seem to be some numerical issues in some instances of doing ray intersections, mainly with irregular polygons. These seem limited to a fairly small range of values for the contact angle.

For tilings that include irregular polygons, when interlacing and non-zero contact deltas are used simultaneously, they will occassionaly cause problems for large contact angles.

Extensions

As extensions, I have implemented interlacing and two-point patterns.

The extensions are discussed in more detail on the extensions page.

Results

Some images are viewable on the results page.