How to determine the center of a Polygon.

Read first: PHP: How to calculate signed area of a Polygon

**Method 1:**

// Find the polygon's centroid. function getCenter($polygon) { $NumPoints = count($polygon); if($polygon[$NumPoints-1] == $polygon[0]){ $NumPoints--; }else{ //Add the first point at the end of the array. $polygon[$NumPoints] = $polygon[0]; } // Find the centroid. $X = 0; $Y = 0; For ($pt = 0 ;$pt<= $NumPoints-1;$pt++){ $factor = $polygon[$pt][0] * $polygon[$pt + 1][1] - $polygon[$pt + 1][0] * $polygon[$pt][1]; $X += ($polygon[$pt][0] + $polygon[$pt + 1][0]) * $factor; $Y += ($polygon[$pt][1] + $polygon[$pt + 1][1]) * $factor; } // Divide by 6 times the polygon's area. $polygon_area = ComputeArea($polygon); $X = $X / 6 / $polygon_area; $Y = $Y / 6 / $polygon_area; return array($X, $Y); }

**Method 2:**

function getCenter($polygon) { $NumPoints = count($polygon); if($polygon[$NumPoints-1] == $polygon[0]){ $NumPoints--; }else{ //Add the first point at the end of the array. $polygon[$NumPoints] = $polygon[0]; } $x = 0; $y = 0; $lastPoint = $polygon[$NumPoints - 1]; for ($i=0; $i<=$NumPoints - 1; $i++) { $point = $polygon[$i]; $x += ($lastPoint[0] + $point[0]) * ($lastPoint[0] * $point[1] - $point[0] * $lastPoint[1]); $y += ($lastPoint[1] + $point[1]) * ($lastPoint[0] * $point[1] - $point[0] * $lastPoint[1]); $lastPoint = $point; } $x /= 6*ComputeArea($polygon); $y /= 6*ComputeArea($polygon); return array($x, $y); }

*Example 1:*

$polygon = array( array(0,6), array(4,6), array(2,3), array(4,0), array(0,0), array(0,6), ); var_dump(getCenter($polygon));

Result:

array(2) {

[0]=>

float(1.55555555556)

[1]=>

int(3)

}

$polygon = array( array(0,3), array(4,4), array(3,0), array(4,-4), array(0,-3), array(-4,-4), array(-3,0), array(-4,4), //array(0,3), ); var_dump(getCenter($polygon));

Result:

array(2) {

[0]=>

int(0)

[1]=>

int(0)

}

## No comments yet.