sub GreenTheoremTest { my ($poly) = @_; my $n = $poly->getSize; my $i; my $asum = 0.0; for ($i = 0; $i < $n; $i++) { my $i1 = ($i + 1) % $n; my $x = $poly->getPoint($i)->x; my $y = $poly->getPoint($i)->y; my $x1 = $poly->getPoint($i1)->x; my $y1 = $poly->getPoint($i1)->y; $asum += $x*$y1 - $x1*$y; } return $asum; } #### my $EPSILON = 1e-20; my $asum = GreenTheoremTest($poly); if (abs($asum) < $EPSILON) { print "Polygon area is too small to be sure of direction!\n"; } elsif ($asum < 0.0) { print "Polygon is clockwise\n"; } else { print "Polygon is counterclockwise\n"; }