Calculating the signed area for an polygon can be found when you know the coordinates of the vertices.

We offer 3 methods below:

**Method 1:**

function ComputeArea($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]; } $area = 0; for( $i = 0; $i <= $NumPoints; ++$i ) $area += $polygon[$i][0]*( $polygon[$i+1][1] - $polygon[$i-1][1] ); $area /= 2; return $area; }

**Method 2:**

function ComputeArea($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]; } $area = 0; for( $i = 0; $i < $NumPoints; $i += 2 ) $area += $polygon[$i+1][0]*($polygon[$i+2][1]-$polygon[$i][1]) + $polygon[$i+1][1]*($polygon[$i][0]-$polygon[$i+2][0]); $area /= 2; return $area; }

**Method 3:**

function ComputeArea($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]; } $area = 0; for ($i = 0; $i < $NumPoints; $i++) { $i1 = ($i + 1) % $NumPoints; $area += ($polygon[$i][1] + $polygon[$i1][1]) * ($polygon[$i1][0] - $polygon[$i][0]); } $area /= 2; return $area; }

**Method 4:**

function ComputeArea($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]; } if ($NumPoints < 3) { return 0; } else { $area = 0; $lastPoint = $polygon[$NumPoints - 1]; foreach ($polygon as $point) { $area += ($lastPoint[0] * $point[1] - $lastPoint[1] * $point[0]); $lastPoint = $point; } return ($area / 2.0); } }

Note: If you list the points in a clockwise order instead of counterclockwise, you will get the negative of the area. Hence this can be used as a tool to identify the cyclic path or sequence of a given set of points forming a polygon.

To get positive value, you can use `abs`

function.

function ComputeArea2($polygon){ return abs(ComputeArea($polygon)); }

*Example 1:*

$polygon = array( array(0,0), array(4,0), array(2,3), array(4,6), array(0,6), ); echo ComputeArea($polygon);

Result:

18

*Example 2:*

$polygon = array( array(0,6), array(4,6), array(2,3), array(4,0), array(0,0), ); echo ComputeArea($polygon);

Result:

-18

Note: Shoelace formula apply for simple polygon (non-self-intersecting polygon).

## No comments yet.