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

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

posted @ 2022-01-06 08:00  西北逍遥  阅读(397)  评论(0编辑  收藏  举报