|
NAMEMath::Polygon::Tree - fast check if point is inside polygonVERSIONversion 0.08SYNOPSISuse Math::Polygon::Tree; my $poly = [ [0,0], [0,2], [2,2], ... ]; my $bound = Math::Polygon::Tree->new( $poly ); if ( $bound->contains( [1,1] ) ) { ... } DESCRIPTIONMath::Polygon::Tree creates a tree of polygon parts for fast check if object is inside this polygon. This method is effective if polygon has hundreds or more segments.METHODSnewTakes contours and creates a tree structure. All polygons are outers, inners are not implemented.Contour is an arrayref of points: my $poly1 = [ [0,0], [0,2], [2,2], ... ]; ... my $bound = Math::Polygon::Tree->new( $poly1, $poly2, ..., \%opt ); or a .poly file my $bound1 = Math::Polygon::Tree->new( \*STDIN ); my $bound2 = Math::Polygon::Tree->new( 'boundary.poly' ); Options: prepare_rough containsmy $is_inside = $bound->contains( [1,1] ); if ( $is_inside ) { ... } Checks if point is inside bound polygon. Returns 1 if point is inside polygon, -1 if it lays on polygon boundary, or 0 otherwise. contains_points# list of points if ( $bound->contains_points( [1,1], [2,2] ... ) ) { ... } # arrayref of points if ( $bound->contains_points( [[1,1], [2,2] ...] ) ) { ... } Checks if all points are inside or outside polygon. Returns 1 if all points are inside polygon, 0 if all outside, or undef otherwise. contains_bbox_roughmy $bbox = [ 1, 1, 2, 2 ]; if ( $bound->contains_bbox_rough( $bbox, \%opt ) ) { ... } Rough check if box is inside bound polygon. Returns 1 if box is inside polygon, 0 if box is outside polygon or undef if it 'doubts'. Options: inaccurate - allow false positive results contains_polygon_roughChecks if polygon is inside bound polygon.Returns 1 if inside, 0 if outside or undef if 'doubts'. if ( $bound->contains_polygon_rough( [ [1,1], [1,2], [2,2], ... ] ) ) { ... } bboxmy $bbox = $bound->bbox(); my ($xmin, $ymin, $xmax, $ymax) = @$bbox; Returns polygon's bounding box. FUNCTIONSread_poly_filemy @contours = read_poly_file( \*STDIN ); my @contours = read_poly_file( 'bound.poly' ) Reads content of .poly-file. See http://wiki.openstreetmap.org/wiki/.poly polygon_bboxmy $bbox = polygon_bbox( [[1,1], [1,2], [2,2], ... ] ); my ($xmin, $ymin, $xmax, $ymax) = @$bbox; Returns polygon's bounding box. bbox_unionmy $united_bbox = bbox_union($bbox1, $bbox2); Returns united bbox for two bboxes/points. polygon_centroidmy $center_point = polygon_centroid( [ [1,1], [1,2], [2,2], ... ] ); Returns polygon's weightened center. Math::Polygon 1.02+ has the same function, but it is very inaccurate. polygon_contains_pointmy $is_inside = polygon_contains_point($point, $polygon); Function that tests if polygon contains point (modified one from Math::Polygon::Calc). Returns -1 if point lays on polygon's boundary AUTHORliosha <liosha@cpan.org>COPYRIGHT AND LICENSEThis software is copyright (c) 2015 by liosha.This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
Visit the GSP FreeBSD Man Page Interface. |