Skip to content

Instantly share code, notes, and snippets.

@jaxxreal
Last active December 23, 2015 23:29
Show Gist options
  • Save jaxxreal/6710335 to your computer and use it in GitHub Desktop.
Save jaxxreal/6710335 to your computer and use it in GitHub Desktop.
function getPolygoneCentroid(polygone){
var centroid = {x:0, y:0};
var signedArea = 0;
var x0 = 0; // Current vertex X
var y0 = 0; // Current vertex Y
var x1 = 0; // Next vertex X
var y1 = 0; // Next vertex Y
var a = 0; // Partial signed area
// For all vertices except last
for (var i=0; i < polygone.geometry.getCoordinates()[0].length-1; ++i)
{
x0 = polygone.geometry.getCoordinates()[0][i][0];
y0 = polygone.geometry.getCoordinates()[0][i][1];
x1 = polygone.geometry.getCoordinates()[0][i+1][0];
y1 = polygone.geometry.getCoordinates()[0][i+1][1];
a = x0*y1 - x1*y0;
signedArea += a;
centroid.x += (x0 + x1)*a;
centroid.y += (y0 + y1)*a;
}
// Do last vertex
x0 = polygone.geometry.getCoordinates()[0][i][0];
y0 = polygone.geometry.getCoordinates()[0][i][1];
x1 = polygone.geometry.getCoordinates()[0][0][0];
y1 = polygone.geometry.getCoordinates()[0][0][1];
a = x0*y1 - x1*y0;
signedArea += a;
centroid.x += (x0 + x1)*a;
centroid.y += (y0 + y1)*a;
signedArea *= 0.5;
centroid.x /= (6.0*signedArea);
centroid.y /= (6.0*signedArea);
return centroid;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment