A canvas implementation of the Meijster algorithm to compute Euclidean, Manhattan, and Chessboard distances
Pull request Compare This branch is even with parmanoir:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
doc
images
README.markdown
distance.css
index.html

README.markdown

Meijster distance

A General Algorithm for Computing Distance Transforms in Linear Time The Meijster distance computes a distance field from a boolean image. A boolean image is made up of zeros and ones, where zero means background (empty space) and one foreground. The resulting distance field is an image whose pixels store distance to foreground.

A distance field can be used for stroking shapes, computing Voronoi diagrams, pathfinding, or performing mathematical morphology operators. The distance field changes depending on the distance function used. Each distance function uses a different shape to compute distance, hold down option ⌥ to reveal it.

Euclidean distance

This is the most commonly used distance function. Given a distance field (x,y) and an image (i,j) the distance field stores the euclidean distance : sqrt((x-i)2+(y-j)2)

Pick a point on the distance field, draw a circle using that point as center and the distance field value as radius. The circle will hit the closest foreground point.

Manhattan distance (Taxicab geometry)

The distance field stores the Manhattan distance : abs(x-i)+abs(y-j)

Pick a point on the distance field, draw a diamond (rhombus) using that point as center and the distance field value as radius. The diamond will hit the closest foreground point.

Chessboard distance (Chebyshev)

The distance field stores the chessboard distance : max(abs(x-i),abs(y-j))

Pick a point on the distance field, draw a square using that point as center and the double distance field value as edge length. The square will hit the closest foreground point.