The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Math::Polygon::Tree - Class for fast check if point is inside polygon

SYNOPSIS

Math::Polygon::Tree creates a B-tree of polygon parts for fast check if object is inside this polygon. This method is effective if polygon has hundreds or more segments.

    use Math::Polygon::Tree;

    my $poly  = [ [0,0], [0,2], [2,2], ... ];
    my $bound = Math::Polygon::Tree->new( $poly );

    if ( $bound->contains( [1,1] ) )  { ... }

METHODS

Constructor

Takes polygons (at least one) and creates a tree structure. All polygons are outer, inners in not implemented.

    my $poly1 = [ [0,0], [0,2], [2,2], ... ];   
    ...
    my $bound = Math::Polygon::Tree->new( $poly1, $poly2, ... );

contains

Checks if point is inside bound polygon. Returns 1 if point is inside polygon or 0 otherwise.

    if ( $bound->contains( [1,1] ) )  { ...

contains_bbox_rough

Checks if box is inside bound polygon. Returns 1 if box is inside polygon, 0 if box is outside polygon or undef if it 'doubts'.

    my ($xmin, $ymin, $xmax, $ymax) = ( 1, 1, 2, 2 );
    if ( $bound->contains_bbox_rough( $xmin, $ymin, $xmax, $ymax ) )  { ... }

contains_polygon_rough

Checks 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], ... ] ) )  { ... }

AUTHOR

liosha, <liosha at cpan.org>

BUGS

Please report any bugs or feature requests to bug-math-polygon-tree at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Math-Polygon-Tree. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Math::Polygon::Tree

You can also look for information at:

COPYRIGHT & LICENSE

Copyright 2009 liosha.

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.