Files
orx/orx-triangulation
2021-02-26 17:51:03 +01:00
..
2021-02-11 10:53:11 +01:00
2021-01-28 15:37:11 +00:00

orx-triangulation

An extension for triangulating a set of points using the Delaunay triangulation method. From that triangulation we can also derive a Voronoi diagram.

The functionality comes from a Javascript port of the following libraries:

Usage

Delaunay

The entry point is the Delaunay class.

    val points: List<Vector2>
    val delaunay = Delaunay.from(points)

    // or
    val flatPoints: DoubleArray // (x0, y0, x1, x1, x2, y2)
    val delaunay = Delaunay(flatPoints)

This is how you retrieve the triangulation results:

val triangles: List<Triangle> = delaunay.triangles()
val halfedges: List<ShapeContour> = delaunay.halfedges()
val hull: ShapeContour = delaunay.hull()

// Updates the triangulation after the points have been modified in-place.
delaunay.update()

Voronoi

The bounds specifices where the Voronoi diagram will be clipped.

val bounds: Rectangle

val delaunay = Delaunay.from(points)
val voronoi = delaunay.voronoi(bounds)
// or
val voronoi = Voronoi(Delaunay.from(points), bounds)

See To Infinity and Back Again for an interactive explanation of Voronoi cell clipping.

This is how you retrieve th results:

val cells: List<ShapeContour> = voronoi.cellsPolygons()
val cell: ShapeContour = voronoi.cellPolygon(int) // index
val circumcenters: List<Vector2> = voronoi.circumcenters()

// Returns true if the cell with the specified index i contains the specified vector
val contaisVector = voronoi.contains(int, Vector2)

// Updates the Voronoi diagram and underlying triangulation
// after the points have been modified in-place
voronoi.update()

Author

Ricardo Matias / @ricardomatias

Demos

DemoDelaunay01

source code

DemoDelaunay01Kt

DemoDelaunay02

source code

DemoDelaunay02Kt

DemoVoronoi01

source code

DemoVoronoi01Kt