CS798 Assignment 2 extensions
What follows are some suggested non-trivial extensions to the implementation
component of assignment 2. You are welcome (and indeed encouraged) to
dream up your own ideas for extensions. These are presented very roughly
in increasing order of when they occured to me. The harder ones make fine
topics for final projects in the course.
Note that not all extensions are created equal. You don't get full
marks just for having an extension. If you want to think of me as
cruel, consider this as being similar to the "subjective marks"
component of the cs488 final project.
- Implement a fancier rendering style for edge shapes, such as
subdivision curves or splines.
- Add the ability to control the positions of tiling vertices.
Different isohedral types require different numbers of parameters.
Note that you can find sample code for tiling vertex parameterizations
on my Escherization
web page, though as I said in class these could be expressed more
succinctly as matrices.
- Add support for other topology types. The biggest bang for your
buck comes from 3^{6}, but I find that others such as
3^{2}.4.3.4 and 3^{4}.6 are fascinating.
- Implement a facility for colouring tiles, perfectly or otherwise.
Because we're dealing with 4^{4}, this could be pretty
easy for starters, but evolve into something more interesting.
- Include some facility for including arbitrary decorations on tiles.
Make the decorations contingent on the tile's colour.
- Implement a fancy, efficient method for rendering the patch of
tiles visible in the viewer. Render only those tiles that intersect
the view region in world coordinates.
- Implement spatial or temporal metamorphoses. This is pretty
easy in the case of 4^{4} tilings with congruent tiling
vertices -- you just need a morphing function for piecewise
linear paths. But some experimentation could lead to many
aesthetic possibilities.
- Add support for some dihedral (or more) tilings. It would
be particularly interesting to support 2-isohedral tilings where
there are different numbers of A and B tiles in any given
translational unit.
- Add support for one or several anisohedral prototiles. You'll
need to find some examples (a good start is
John Berglund's
page on the subject). Then you'll need to parameterize the
space of tile shapes available for the combinatorial structure
of that prototile.
- Add support for aperiodic prototiles, such as Penrose tiles.
My thesis covers this case; other prototile sets, such as
Ammann's, would be great too.
- Implement the anti-mercator projection to turn an infinite strip
of tiles into a design where tiles shrink to a point at the
origin (see, for example, Escher's Development 2). I
won't talk about this transformation until near the
end of the course. In the meantime, you can find a mention of
it, together with a reference, in Chapter 5 of my thesis. Or
you can come talk to me.
- Figure out a way to manipulate tiling vertices directly using
constraint satisfaction rather than by adjusting abstract
parameters.
- Implement Escherization.
- Use a fragment shader to sample the tiling efficiently and produce
a real-time antialised vector drawing of it.
- Implement some way to cause your tiling to pass discontinuously
into a different but related isohedral type if edges degenerate
or tiling vertices bifurcate. Or, have a way to break symmetries
in the prototile when symmetric edges are chosen to be broken.
A really nice way to do this would be to use Celine Latulipe's
research on bimanual input using two mice. One mouse can hold
an edge, and the other can drag a symmetric copy.
- Support some 3D isohedral tilings.
- Support isohedral tilings in spherical geometry. See
Yen and Séquin, Escher sphere construction kit (I3D 2001).