The Tactile libraries

Randomly generated tilings. Click to pause.

I was very lucky as a graduate student to fall in with an advisor who was interested in applications of computer graphics to art and design, and who allowed me a lot of leeway to explore creative topics that interested me. I ended up completing a PhD about two main topics: Islamic geometric patterns and M.C. Escher’s tessellations.

I was also extraordinarily lucky to have a few opportunities to interact with Branko Grünbaum, who was a mathematics professor at the University of Washington (and who sadly passed away just a couple of months ago). He was a brilliant geometer who, together with Geoffrey Shephard, published Tilings and Patterns, which to this day remains the bible of tiling theory. It was Branko who first pushed me in the direction of studying the isohedral tilings as part of my research on Escher. The isohedral tilings are a particular family of tilings that are in the sweet spot for computer graphics: they’re simple to define and manipulate in software, and expressive enough to represent the sorts of interlocking animal forms that Escher invented. The isohedral tilings became such an integral part of my intellectual landscape that I began to use the word as an account name online (most obviously, because it was unlikely to have been taken by anybody else), and later chose it as the name of this website.

Over the 20 years since I first began studying computation on tilings, I have been contacted numerous times by other computer scientists who were interested in similar research topics and wanted to get a copy of my source code as a starting point for their own work. I always regretfully declined, for good reason. The library I created for my PhD was a mess—I created it by stumbling blindly through the mathematical ideas I needed, not knowing how complex the final product would be. To make matters worse, the old code relied on ancient 2000-era C++ libraries that are difficult or impossible to use today. Of course, I always hoped to have an opportunity to develop a new, streamlined version of the library based on the lessons learned through this first experience.

Today I’m happy to say that I’ve come full circle on the isohedral tilings. I’ve had a bit of time over the last few months to develop a new software library that streamlines and simplifies my earlier version. During my PhD I called my software Tactile, and I’ve decided to revive that name. The new Tactile library is slick, fast, lightweight, and easy to use. It’s been quite fun to play with so far, developing small demo programs that draw tilings, like the random tiling generator in the banner at the top of this page.

The library comes in two flavours: there’s a portable C++ version simply called Tactile, which should easily compile into any application. There’s also a Javascript version called TactileJS, which should make it easy to incorporate live tilings into web-based applications. The two links above will take you to Github repositories for the two libraries. They’re both offered under the permissive 3-clause BSD license, so feel free to use them however you like! Both repositories come with short tutorials and demo programs, which is hopefully enough to get started. If not, I suppose I’ll put together more comprehensive documentation in response to requests by users. I’m also planning to write a more technical paper about the development of this library, which I hope will include some information on how to use it in programs.

If you’re not a programmer, you can still use Tactile to play with tilings, just for fun. On a separate page I offer a minimalist interactive editor for isohedral tilings (see the instructions on that page for more information). That implementation will work well on a laptop or desktop, where you can drive it with a combination of mouse and keyboard. If you want a purely touch-based experience suitable for a tablet, you can also try fancier version at I hope these are fun!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.