May 12, 2010 Catching Common Image Processing Programming Errors with Generic Unit Tests When implementing image algorithms, I am prone to make these mistakes: swapping x and y; working on the wrong channel; making off-by-one errors, especially…

May 28, 2009 Getting More out of Seamless Tiles I wrote an article for Dev.Mag covering some techniques for working with seamless tile sets such as making blend tiles, getting more variety with procedural colour manipulation,…

April 28, 2009 Generating Random Integers With Arbitrary Probabilities I finally laid my hands on Donald Knuth’s The Art of Computer Programming (what a wonderful set of books!), and found a neat algorithm…

April 15, 2009 Estimating a Continuous Distribution from a Sample Set It is sometimes necessary to find the distribution given a sample set from that distribution. If we do not know anything about the distribution,…

April 15, 2009 Generating Random Points from Arbitrary Distributions for 2D and Up I have already covered how to generate random numbers from arbitrary distributions in the one-dimensional case. Here we look at a generalisation of that…

December 15, 2008 A simple texture algorithm – faster code and more results Faster Code A while back I wrote about a simple texture algorithm that I have been exploring. The Python implementation was very slow –…

November 15, 2008 Quadtrees The code below implements some quadtree extensions, as discussed in another Dev.Mag tutorial about quadtrees (see Issue 27). The tutorial covers the following topics:…

November 14, 2008 A Simple Procedural Texture Algorithm – More Results and Code In a previous post I explained a simple algorithm for generating textures. Below are some more examples of the kinds of textures that the…

I use this code to illustrate many of the tutorials on this site, and the articles I write for Dev.Mag. Ideally, I would like…

November 11, 2008 5 Tips for Prototyping Slow Algorithms (Photo by Darren Hester) Some algorithms take a long time to return their results. Whether it is because the algorithm has to operate on…