This library has been around for a while but I only just discovered it a few weeks back.

(Drag you mouse over the example and click to switch between Delaunay and Voronoi)

A recent project required thousands of points to be displayed and lines connecting them all. A colleague then introduced me to Delaunay triangulation.

I started searching around for any libraries that had been build that used Delaunay. I cam across a few and after some testing found that as3delaunay was exactly what I needed.

The library also allows for drawing Voronoi diagrams also.

I found it rather hard to find a basic example so here is some code to get you started:

package com.kafkaris.delaunaydemo {
	import com.nodename.Delaunay.Voronoi;
	import com.nodename.geom.LineSegment;

	import flash.display.Sprite;
	import flash.geom.Point;
	import flash.geom.Rectangle;

	public class Example extends Sprite {
		private var _points:Vector.<Point>;
		private var _plotBounds:Rectangle;
		private var _voronoi:Voronoi;
		private var _segments:Vector.<LineSegment>;

		public function Example() {
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);

		private function init(event:Event = null):void {
			_points = new Vector.<Point>();

			for (var i:uint = 0; i < 50; i++) {
				var point:Point = new Point(Math.random() * stage.stageWidth, Math.random() * stage.stageHeight);

			_plotBounds = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);
			_voronoi = new Voronoi(_points, null, _plotBounds);

			_segments = _voronoi.delaunayTriangulation();

			for each (var segment:LineSegment in _segments) {
				graphics.lineStyle(2, 0x000000, 1);
				graphics.moveTo(segment.p0.x, segment.p0.y);
				graphics.lineTo(segment.p1.x, segment.p1.y);

If you want to use this example to draw a Voronoi diagram instead, swap this line:

_segments = _voronoi.delaunayTriangulation();

with this line:

_segments = _voronoi.voronoiDiagram();

Really enjoyed using this library, a good one to keep in mind for data visualisations.