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.events.Event; 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); _points.push(point); } _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.
JK