Jimmy Chen

FastLSystemRenderer.jl

A Julia package that does one thing and does it pretty efficiently: rendering Lindermayer Systems (or L-systems for short).

Lindermayer Systems are wonderful. They're one of the best demonstrations of how simple rules produce incredible complexities (similar to cellular automata in that regard). Paul Bourke has a nice page going through how it works, how it is commonly implemented, and many pretty examples.

This package started out as a hobby project that I later decided to (rather rashly) wrap into a package. Heavy optimization was my goal from the beginning, and I had to trade certain extended L-system functionalities for speed. My hope was that the speed factor would also open up new possibilities to explore L-systems at higher iterations. And I think I have achieved this reasonably well. Coincidentally, the specific optimizations used here are similar to this L-system implementation in C by Matt Zucker, and the resulting performance is similar (according to some informal benchmarking by me).

Many examples below are taken from a great collection of L-systems that comes with the Vision of Chaos software (a fantastic goldmine of visual algorithms and a generous playground of computer art, and the starter of many personal obsessions). All images are rendered with FastLSystemRenderer.jl.

"ADH462" (L-system by Anthony Hanmer, listed in "HORIZONS")

"T186a" (L-system by Anthony Hanmer, listed in "MAZE09")

"ADH107h22b" (L-system by Anthony Hanmer, listed in "HANMER4")

Two binomial trees (L-system by me)

"T228" (L-system by Anthony Hanmer, listed in "MAZE09")

"ADH306" (L-system by Anthony Hanmer, listed in "HORIZONS")

"Flower02" (L-system by Ole Jorgensen, listed in "OF-FIBONA")

© Jimmy Chen. Last modified: March 19, 2023. Website built with Franklin.jl and the Julia programming language.