# Agates.

My oldest project, first in Python, now in Rust : agates ! Mineral formations that I try to mimic here. It uses morphological operators to grow an agate.

# Quasicrystals

Quasicrystals... Mysterious entities... a structure that is ordered but not periodic. A quasicrystalline pattern can continuously fill all available space, but it lacks translational symmetry.

This is an attempt to mimic them... With animation ! The symmetry seems to be everywhere but really is nowhere...

# Snowflakes growth.

I have a deep love for all snowflakes. I often open a book, "Kenneth Libbrecht - The Art of the Snowflake, A Photographic Album" to see how complex they are. So when I found a paper on how to model snowflake growth, I had to implement it.

Modeling snow-crystal growth: A three-dimensional mesoscopic approach, by Janko Gravner and David Griffeath.

They are drawn using POV-Ray.

# Spirograph.

I added a motion blur feature to my animation library and I just wanted to show you what it looks like with a spirograph animation !

# Traveling Salesman Problem.

TSP stands for "Traveling Salesman Problem". It tells the story of a salesman willing to find the shortest path between all the cities he travels to, to sell his goods. Here, we draw the path he travels to reveal an image with meandering lines.

# Stippling.

Stippling is the art of harmoniously placing "stipples", basically dots, to form an image.

This method can produce beautiful portraits or sceneries.

I use Linde-Buzo-Gray Weighted stippling method. It makes use of the previously developped Voronoï diagrams !

The other ones are drawn using a pen plotter !

# Voronoi diagrams.

It took me some times, but I wanted to implement Fortune's algorithm to produce the Voronoï Diagram of a set of points in 2D, and I finally did. I originally thought of Voronoï diagram as a mathematical tool, but now I think that these diagrams can be beautiful by themselves. Take a look at the progression !

# Wallpaper groups.

A wallpaper group is a mathematical classification of a two-dimensional repetitive pattern, based on the symmetries in the pattern. There is 17 wallpaper groups. I made an example of each one with a domain coloring technique. I'd like to thank Frank A. Farris for his amazing book "Creating Symmetry".

I'll first show the 17 groups, then how we can play with them by morphing them or animating them.

## The 17 groups

### P1

# Truchet Patterns.

Jumping on a new project today. Browsing the internet the other day, I found a paper about Multi-scale Truchet Patterns and wanted to give it a try.

Truchet Patterns are made of tiles that can be gathered even at different scales to show a beautiful pattern.

I wanted to try my new animation code so here is an animation showing how rich Truchet patterns can be, even with the same tiles, when rotating them.

# Understanding the Perlin Noise

## Introduction

Sure, the value noise we've seen in the previous posts is nice, but it's very blocky, especially with one octave only :

###### A sample of 2D value noise.

And that's very understandable : we fixed a grid of values and interpolates between these values, so we really do see the grid. That might be OK for some applications, but if you want to look natural, these alignments don't look good.

Perlin noise resulted from the work of Ken Perlin, who developed it for the movie Tron (1982) to improve the value noise.

To obfuscate the grid, the idea is not to associate a value at integers coordinates, but a *direction*.

We'll develop here a modern version of Perlin Noise in 1D, 2D, 3D and 4D.