javascript earcut

THREE.Earcut = {

    triangulate: function ( data, holeIndices, dim ) {

        dim = dim || 2;

        const hasHoles = holeIndices && holeIndices.length;
        const outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;
        let outerNode = linkedList( data, 0, outerLen, dim, true );
        const triangles = [];

        if ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;

        let minX, minY, maxX, maxY, x, y, invSize;

        if ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );

        // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox
        if ( data.length > 80 * dim ) {

            minX = maxX = data[ 0 ];
            minY = maxY = data[ 1 ];

            for ( let i = dim; i < outerLen; i += dim ) {

                x = data[ i ];
                y = data[ i + 1 ];
                if ( x < minX ) minX = x;
                if ( y < minY ) minY = y;
                if ( x > maxX ) maxX = x;
                if ( y > maxY ) maxY = y;

            }

            // minX, minY and invSize are later used to transform coords into integers for z-order calculation
            invSize = Math.max( maxX - minX, maxY - minY );
            invSize = invSize !== 0 ? 1 / invSize : 0;

        }

        earcutLinked( outerNode, triangles, dim, minX, minY, invSize );

        return triangles;

    }

};
var triangles = THREE.Earcut.triangulate([10,0, 0,50, 60,60, 70,10]);

参考:https://github.com/mapbox/earcut

#######################################

QQ 3087438119
原文地址:https://www.cnblogs.com/herd/p/15769559.html