How to check if the vertices of polygon are in clockwise or counter-clockwise order?
There are many of method to check this. We offer some method below:
Method 1: Use ComputeArea function:
//true if counter-clockwise, false if clockwise function CCW($polygon){ $area = ComputeArea($polygon); return $area>0; }
Method 2:
/* return 0 if failure 1 if CCW -1 if CW */ function CCW2($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; $count = 0; for ($i=0;$i<$NumPoints;$i++) { $j = ($i + 1) % $NumPoints; $k = ($i + 2) % $NumPoints; $z = ($polygon[$j][0] - $polygon[$i][0]) * ($polygon[$k][1] - $polygon[$j][1]); $z -= ($polygon[$j][1] - $polygon[$i][1]) * ($polygon[$k][0] - $polygon[$j][0]); if ($z < 0) $count--; else if ($z > 0) $count++; } if ($count > 0) return 1; else if ($count < 0) return -1; else return 0; }
Note: It is assumed that the polygon is simple (does not intersect itself or have holes)
$polygon = array( array(0,6), array(4,6), array(2,3), array(4,0), array(0,0), ); var_dump(CCW2($polygon));
Result:
int(-1)