JSPM

  • Created
  • Published
  • Downloads 2958121
  • Score
    100M100P100Q199531F
  • License ISC

The fastest and smallest JavaScript polygon triangulation library for your WebGL apps

Package Exports

  • earcut

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (earcut) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Earcut

The fastest and smallest JavaScript polygon triangulation library for your WebGL apps. 1.6KB gzipped.

The library implements an ear slicing algorithm which is extended to handle holes, twisted polygons, degeneracies and self-intersections in a way that doesn't guarantee correctness of triangulation, but attempts to always produce acceptable results for practical data like geographical shapes.

It's based on ideas from FIST: Fast Industrial-Strength Triangulation of Polygons paper.

Why another triangulation library?

The aim of this project is to create a JS triangulation library that is fast enough for real-time triangulation in the browser, sacrificing triangulation quality for raw speed and simplicity, while being robust enough to handle most practical datasets without crashing or producing garbage. Some benchmarks:

(ops/sec) pts earcut libtess poly2tri pnltri
OSM building 15 572,982 28,124 28,131 210,320
dude shape 94 22,238 5,904 3,544 12,916
holed dude shape 104 9,752 5,204 3,205 2,232
complex OSM water 2523 29.17 64.73 failure failure

Earcut may be slow for huge complex shapes, but when it comes to triangulating lots of shapes with relatively low number of vertices on average (the use case earcut was created for), it's much faster.

If you want a library that is always guaranteed to produce correct triangulation even on very bad data, libtess.js is certainly the best choice.

Usage

// input should be an array of rings, where the first is outer ring and others are holes;
// each ring is an array of points, where each point is of the `[x, y]` form
var points = [[[10, 0], [0, 50], [60, 60], [70, 10]]];

var trianglePoints = earcut(points);
// returns an array of points where each group of three forms a triangle

Install

NPM and Browserify:

npm install earcut

Browser builds:

npm install
npm run build-dev # builds dist/earcut.dev.js, a dev version with a source map
npm run build-min # builds dist/earcut.min.js, a minified production build