I decided to put the Poisson disk sampling code here for download since the site that hosted it is down. The code accompanies the tutorial on Dev.Mag: Poisson Disk Sampling.
Download
7 April 2010 |
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, tile placement strategies, and so on.
Check it out!
The Python Image Code has also been updated with some of the algorithms explained in the article.
28 May 2009 |

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 for generating random integers 0, 1, 2, … , n – 1, with probabilities p_0, p_1, … , p_(n-1).
I have written about generating random numbers (floats) with arbitrary distributions for one dimension and higher dimensions, and indeed that method can be adapted for generating integers with specific probabilities. However, the method described below is much more concise, and efficient (I would guess) for this special case. Moreover, it is also easy to adapt it to generate floats for continuous distributions.
Read the rest of this entry »
Tags: 2D, optimisation, probability, Python, random, random distribution, random integer, random number generation
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:
- what to consider in choosing whether to use a quadtree or not;
- tests to help you choose an appropriate threshold;
- how to handle discrete data; and
- some modifications to the basic algorithm.
Handling Discrete Data
When it comes to discrete data, the “average” of a number of pixels doesn’t make sense. However, we can give it meaning and still use it to get good approximations of the original data, as illustrated in the images below.
 |
The original grid of discrete data. The grid contains integers from 0 to 4. Every integer is mapped to a colour in this image. (If this grid represented a tile map, every integer would be mapped to a different tile). |
 |
Here we allowed floating point numbers in the quadtree. Results of queries into the quadtree are rounded before mapping them to colours. |
 |
Here we used the floating point part of queries to bias a randomly selected integer. For example, a result of 1.25 will result in a 75% chance of yielding 2. |
 |
Here we use a quadtree with interpolation. The result is rounded before it is mapped. |
 |
Here we use a quadtree with interpolation, and use the floating point part of the number to bias a randomly selected tile, as above. |
Download
Python Implementation
Download from: http://code-spot.co.za/python-image-code/ (See quadtree.py, quadtree_image.py, and quadtree_demo.py).
Tags: 2D, AI, compression, computer graphics, Dev.Mag, image partitioning, Image Processing, Python, quadtree, quadtrees, random, spatial partitioning
The quadtree is an important 2D data structure and forms the core of many spatial algorithms, including compression, collision detection, and stitching algorithms. Below you can download general purpose quadtree implementations in Java and Python.
The code accompanies the Quadtrees article in Dev.Mag. The tutorial explains how the implement a quadtree that can be use to store 2D data efficiently, lists what considerations there are in real-world applications, and gives some debugging tips.
Channels Compressed Simultaneously
 |
 |
| The original image (by smcgee). |
The image after being loaded into a quadtree. |
Read the rest of this entry »
Tags: 2D, AI, compression, computer graphics, Dev.Mag, Game Development, image partitioning, Image Processing, Python, quadtree, quadtrees, spatial partitioning
Recent Comments