How can you find the centroid of a concave irregular polygon in JavaScript?

前端 未结 4 1450
一向
一向 2020-12-29 07:33

How can you find the centroid of a concave irregular polygon given its vertices in JavaScript?

I want to pass a set of x,y points to a JavaScript function and be giv

4条回答
  •  抹茶落季
    2020-12-29 07:54

    The accepted answer has an issue which becomes prominent as the polygon's area becomes smaller. It would not be visible in most cases, but can result in some weird results at very small dimensions. Here's an update to that solution to account for this issue.

    function get_polygon_centroid(pts) {
       var first = pts[0], last = pts[pts.length-1];
       if (first.x != last.x || first.y != last.y) pts.push(first);
       var twicearea=0,
       x=0, y=0,
       nPts = pts.length,
       p1, p2, f;
       for ( var i=0, j=nPts-1 ; i

    Here's a case of a centroid ending up outside of a small polygon for anyone curious as to what I'm talking about:

    var points = [
        {x:78.0001462, y: 40.0008827},
        {x:78.0000228, y: 40.0008940},
        {x:78.0000242, y: 40.0009264},
        {x:78.0001462, y: 40.0008827},
    ];
    // original get_polygon_centroid(points)
    // results in { x: 77.99957948181007, y: 40.00065236005001 }
    console.log(get_polygon_centroid(points))
    // result is { x: 78.0000644, y: 40.000901033333335 }
    

提交回复
热议问题