Math::Polygon::Calc.3pm

Langue: en

Version: 2009-05-25 (ubuntu - 24/10/10)

Section: 3 (Bibliothèques de fonctions)

NAME

Math::Polygon::Calc - Simple polygon calculations

INHERITANCE

  Math::Polygon::Calc
    is a Exporter
 
 

SYNOPSIS

  my @poly = ( [1,2], [2,4], [5,7], [1, 2] );
 
  my ($xmin, $ymin, $xmax, $ymax) = polygon_bbox @poly;
 
  my $area = polygon_area @poly;
  MY $L    = polygon_perimeter @poly;
  if(polygon_is_clockwise @poly) { ... };
  
  my @rot  = polygon_start_minxy @poly;
 
 

DESCRIPTION

This package contains a wide variaty of relatively easy polygon calculations. More complex calculations are put in separate packages.

FUNCTIONS

polygon_area(LIST-OF-POINTS)
Returns the area enclosed by the polygon. The last point of the list must be the same as the first to produce a correct result.
The algorithm was found at <http://mathworld.wolfram.com/PolygonArea.html>, and sounds:
  A = abs( 1/2 * (x1y2-x2y1 + x2y3-x3y2 ...)
 
 

polygon_bbox(LIST-OF-POINTS)

Returns a list with four elements: (xmin, ymin, xmax, ymax), which describe the bounding box of the polygon (all points of the polygon are within that area.

polygon_beautify([HASH], LIST-OF-POINTS)

Polygons, certainly after some computations, can have a lot of horrible artifacts: points which are double, spikes, etc. This functions provided by this module beautify The optional HASH contains the OPTIONS:
  Option        --Default
  remove_between  <false>
  remove_spikes   <false>
 
 

. remove_between => BOOLEAN

Simple points in-between are always removed, but more complex points are not: when the line is not parallel to one of the axes, more intensive calculations must take place. This will only be done when this flags is set. NOT IMPLEMENTED YET

. remove_spikes => BOOLEAN

polygon_clockwise(LIST-OF-POINTS)

Be sure the polygon points are in clockwise order.

polygon_contains_point(POINT, LIST-OF-POINTS)

Returns true if the point is unside the closed polygon.

polygon_counter_clockwise(LIST-OF-POINTS)

Be sure the polygon points are in counter-clockwise order.

polygon_equal(ARRAY-OF-POINTS, ARRAY-OF-POINTS, [TOLERANCE])

Compare two polygons, on the level of points. When the polygons are the same but rotated, this will return false. See polygon_same().

polygon_is_clockwise(LIST-OF-POINTS)

polygon_is_closed(POINTS)

polygon_perimeter(LIST-OF-POINTS)

The length of the line of the polygon. This can also be used to compute the length of any line: of the last point is not equal to the first, then a line is presumed; for a polygon they must match.
This is simply Pythagoras.
  $l = sqrt((x1-x0)^2 + (y1-y0)^2) + sqrt((x2-x1)^2+(y2-y1)^2) + ...
 
 

polygon_same(ARRAY-OF-POINTS, ARRAY-OF-POINTS, [TOLERANCE])

Compare two polygons, where the polygons may be rotated wrt each other. This is (much) slower than polygon_equal(), but some algorithms will cause un unpredictable rotation in the result.

polygon_start_minxy(LIST-OF-POINTS)

Returns the polygon, where the point which is closest to the left-bottom corner of the bounding box is made first.

polygon_string(LIST-OF-POINTS)

SEE ALSO

This module is part of Math-Polygon distribution version 1.01, built on May 25, 2009. Website: http://perl.overmeer.net/geo/

LICENSE

Copyrights 2004,2006-2009 by Mark Overmeer. For other contributors see ChangeLog.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See http://www.perl.com/perl/misc/Artistic.html