Recently, some of my peers (Ooo Shiny!) started chatting about the Tree of Life and the data visualization potential contained within. We came to no specific conclusion other than we all thought it would be awesome to be able to tap into a proper Tree of Life API. One thing I did realize is that I had never worked on a proper branching data set visualization.
Sadly, these images are not a representation of the blogosphere or the word count in Obama’s inauguration speech. It is purely random but I am happy with the results. And it really wouldn’t be much work to make this code reflect the nuances of a proper data set, but I will worry about that later.
If you know me at all, you know I have a fondness for magnetism and particle engines. You might also know I rather enjoy continuing to follow a thread rather than start a whole new strand. That is why I decided to use my particle engine source code to start a branching system rather than doing it from scratch using springs or L-system theory.
I started very simple. I made a spherical object. In addition to physical characteristics like radius, mass, charge, and appearance, it also has an age: a countdown to mitosis if you will. Once the count reaches the age limit, the object splits off multiple children (generally, 1 to 4 children will be created). As with human beings, once children are made, movement begins to slow down. The parent object will continue to age and will eventually become immobile.
The children are mirror images of the parent but with a slightly diminished mass and radius. They also rather dislike each other so the first thing they do is move away from each other using magnetic repulsion as the driving force. But the parental bond is strong so each child is connected to its parent with a cylindrical form.
There is one catch which may or may not prove to be useful. Every object is also repulsed by every other object. It’s not a generational repulsion: everything moves away from everything else. The universal ancestor has as much repulsive force (based on distance) on a 14th generation child as its own parent does. The end result is a nice space-filling growth, but it is rather computationally heavy and entirely unnecessary.
Again, as with most of my work, I am not sure where I am going with this, but I am happy with how it has progressed in the few hours I have spent with it. Id eventually like to give it a proper aesthetic shine, but I am going to work on understanding the code a bit more first. I know I wrote it, but that doesn’t mean I fully understand it.