# Isometric Snowflakes

## Introduction

This post uses a rust-based Emacs plugin for generating art and plotting it using AxiDraw plotters.

You can find it at l3kn/Plotter .

## Symmetry

Most snowflakes have six-fold radial symmetry.

A cube under isometric projection forms a hexagon.

To replicate the symmetry of a snowflake, we fill this cube with randomly generated cuboids, then swap their axes (x and y, x and z, y and z) to introduce three-fold symmetry.

## Randomness

Each image should uses a random seed of 32 bits (eight hexadecimal digits).

What I like about generative art is being surprised by how different the outputs of a simple algorithms can look when all the parameters are randomized.

When generating random numbers, I like to do so in two steps, first generating a range delimited by two powers of two where are chosen at random (in a limited range), then generating random numbers in this range.

## Iteration 1

``` -> ``` is a threading macro from magnars/dash.el .

```(dotimes (_i 50)
(let* ((seed (plt-random-seed))
(caption (vector (format "0x%s" seed))))
(random seed)
(let* ((grid-size 128)
(n-cuboids (plt-random-pow2 4 7))
(cuboid-size (plt-random-pow2-size 0 6))
(grid (plt-make-grid grid-size)))
(-> (loop for x below n-cuboids
collect
(plt-random-iso-cuboid (plt-random-pow2-size 0 6) grid-size))
(plt-swap-xy-both)
(plt-swap-xz-both)
(plt-swap-yz-both)
(plt-grid-to-image
grid
plt-a3-size
plt-a3-caption-size
(concat dir "/a3/" seed ".svg")
"iso_snowflake1"
caption)
(plt-grid-to-image
grid
plt-a4-size
plt-a4-caption-size
(concat dir "/a4/" seed ".svg")
"iso_snowflake1"
caption))))
```

## Iteration 2

```(dotimes (_i 50)
(let* ((seed (plt-random-seed))
(caption (vector (format "0x%s" seed))))
(random seed)
(let* ((grid-size 128)
(n-cuboids (plt-random-pow2 4 7))
(grid (plt-make-grid grid-size)))
(-> (loop for x below n-cuboids
collect
(plt-random-iso-cuboid (plt-random-pow2-size 0 6) grid-size))
(plt-swap-xy-both)
(plt-swap-xz-both)
(plt-swap-yz-both)
(plt-grid-to-image
grid
plt-a3-size
plt-a3-caption-size
(concat dir "/a3/" seed ".svg")
"iso_snowflake2"
caption)
(plt-grid-to-image
grid
plt-a4-size
plt-a4-caption-size
(concat dir "/a4/" seed ".svg")
"iso_snowflake2"
caption))))
```

## Getting a Plot of This

If you have an AxiDraw or a similar plotter that can plot svg files, you should be able to download these images and plot them yourself.

On l3kn/iso_snowflakes you can find hundreds of randomly generated svg files in A3 and A4 size.

The order of the paths is already optimized, images can be plotted using the AxiDraw CLI .

I'm using the following command (AxiDraw V3 A3):

```axicli image_name.svg -L 2 -p /dev/ttyACM0 -s 30 -S 50 -a 30
```

For different paper sizes, you can resize the images in inkscape.

Only ``` path ``` elements are used, so it should be possible to plot these images with an HPGL plotter, too. To do so, either parse the ``` path ``` elements of the svg and scale the points or write to support@leonrische.me so we can come up with a format that's easy for me to generate and easy for you to use.

If you want a plot on nice paper, contact me at sales@leonrische.me .

Permissions beyond the scope of this license may be available at mailto:contact@leonrische.me .

When distributing this work, please link to the Isometric Snowflakes page. For printed / plotted versions, the URL could be written on the back.

This license allows commercial use, if you want to sell plots of these images, please don't charge more that necessary to cover material costs and a hourly wage for yourself you consider fair.

## Material Used

### Pens

• Faber-Castell Pitt Artist Pen, blue, 0.3 (S)
• Sakura Gelly Roll, white, 05

### Paper

• Bristol, A4, 250g/m^2
• Black carton paper, A4, 3008/m^2