Thursday, 12 January 2012

Recursive Random Triangular Subdivision

I've started getting into writing my blog on my lunch hour so I've had to come up with some quick and easy 30 minute experiments - I need the other 30 minutes to eat... Here is today's result (it follows along the lines of my circle packing experiment a while back). It works like this. One starts by drawing a triangle, then picks a random point within that triangle. These vertices are then used to draw more triangles, and the process is repeated recursively. At each stage the triangles are rendered with a level of transparency. This means more "visited" triangles will appear brighter thus forming a kind of network. Click the image below to launch the demo and find the source here.

Wednesday, 11 January 2012

Embedding Fonts In Actionscript 3

I hardly use the Flash IDE at all any more. Pretty much all of my coding is done in FlashDevelop. One thing that the IDE does very well is the embedding of fonts but there are certainly ways of doing it using purely code. People seem to have found many ways of embedding fonts but this one has always worked for me:

This class is my font library - I embed all fonts that I use in here. The two things to note are the embed code for the fonts and public constants to allow me to access them using FontLibrary.FONT...

This is the main class of my application. Here I create a sample text field and set the text format to one of my embedded fonts.

Easy! You can download all of the source files for this and my other projects from:

Two Dimensional Water Simulation

This is my first blog post in a while so I thought I'd try something interesting. A few years ago I took a look at some discrete cell methods for simulating water in 2D. I decided to take a new approach and use a particle based method to simulate particles interacting. The image below shows the simulation running with 6000 particles at a reasonable framerate. All the particles in the scene repulse one another, and are accelerated earthward by gravity. If a naive approach were taken, the number of tests performed on each iteration of the program would be 6000 * 6000 = 3600000 distance calculations. This would be a large number of square roots for even the best CPU. In order to get around this I make use of some simple image filters to approximate the same result. Each particle is rendered to a bitmap buffer as a single pixel (I took this approach for a previous experiment). These pixel values are then blurred and the gradients at each point on the bitmap calculated using Sobel operators. At this stage calculating particles updated trajectories is just a case of subtracting the value of the gradient at each point from their velocity. Because the blur filter naturally falls off the repulsive force is proportional to the kernal used in the filtering process.

As usual just click to try out the demo!

The source code for all projects from now on will be added to a single flash project which can be found at: