Introducing Tessella: tilings by regular polygons

Happy to introduce the new Tessella library, first release 0.1.3 available on Maven Central for Scala 3.3 LTS.

Screenshot 2024-04-14 at 11-10-50 Tessella

Little practical use, but if you are fascinated by tessellations, for both mathematics and aesthetics, like I have always been, you might be interested in their description as finite undirected graphs.

Code repository: GitHub - scala-tessella/tessella: Tilings by regular polygons
Scaladoc: io.github.scala_tessella.tessella

Questions, suggestions and contributions are more than welcome.

6 Likes

Starred! :heart_decoration:

I wonder where clothing and wallpaper designers get their inspiration from - perhaps you could turn this into an art generator, or try to tessellate an outfit without gaps?

Folks in the packaging industry devote brainpower to trying to fit as many diecutting patterns as possible on to a single diecutting board, the purpose being to minimise wastage of cardboard and to balance the forces on the diecutting blades. You might have something there too…

Anyway, nice work, liked the documentation. The link to Wikipedia deserves a star in its own right just as an introduction to a world of mathematics and an art form.

See this https://youtu.be/A1BhOVW8qZU?t=900

Thank you @spamegg1 and @sageserpent-open for the positive feedback!

For me this is truly a labour of love, it is placed a that junction of art / design and math / coding where, as an all-round amateur, I feel happy and creative.

So for the possible different areas:

  • math: I suspect that a group of (irregular) tessellations I “discovered” (while playing with regular ones) may be mathematically described and form a new entity in their own right, but I have not researched this enough and honestly I would probably need some expert advice in the field. There might be also the possibility that some algorithms dealing with tessellation are indeed original, for example when calculating the uniformity value of a finite tessellation (for what uniformity is, see Uniform Tessellation -- from Wolfram MathWorld).
    @spamegg1 great video, tessellations never stop to amaze me! (with my project I am exploring just a very strict - but classical - niche of tessellations, there is plenty of room for expansion and generalization)

  • Scala 3: I am sure there are some not-so-clean spots in the current code when dealing with equality of the case class Tiling instances, I will try to clarify this and seek for your help. And most likely all the project could benefit from some expert advice.

  • design: while experimenting with algorithms creating tessellations, I saw hints of patterns that seemed interesting and truly new to my eye. I decided to protect some of them as registered European community designs and the registration was accepted. This was just for vanity :slight_smile: , no real plan for any production!

  • art derived from design: it’s the most personal part. I was so aesthetically pleased by some patterns, that I started painting them, acrylic on canvas. The process is a good form of meditation but quite demanding!

  • die-cutting patterns: @sageserpent-open never thought about that, but I see your point, very interesting.

1 Like

It may actually be pretty easy to compile this for scala.js. That would enable people to play with it and generate graphics in the browser with scastie or scribble.

1 Like

Definitely yes @Jasper-M, the ability to convert to (complex) SVG xml or files is already there, and then you can open them as images in your OS or in the browser.

Following on the scala.js expansion, in my dreams I thought of an editor where you can visually create SVG tessellations just by drag and drop of a new regular polygon to the side of an existing one, and the addition is accepted or not according to the already available Tiling validation rules. All the building blocks are in theory in place.

Right now, when I needed to manually draw regular polygon tessellations, I have been using LibreCad, that is quite easy and powerful, but of course knows nothing about tessellations, their properties and their rules.

You can already do things like this in Scastie without scala.js

But for Scribble, scala.js is needed and the output could be immediately translated to visual.