Math-Polygon-Tree

 view release on metacpan or  search on metacpan

t/contains.t  view on Meta::CPAN

#!/usr/bin/perl

use 5.010;
use strict;
use warnings;
use utf8;

use Test::More;

use Math::Polygon::Tree;


our @TESTS = (
    [
        triangle => [[0,0],[2,0],[0,2]],
        [ [0,0], -1, 'vertex point' ],
        [ [0,1], -1, 'edge point 1' ],
        [ [1,1], -1, 'edge point 2' ],
        [ [0.5,0.5], 1, 'inside' ],
        [ [1.5,1.5], 0, 'outside' ],
        [ [8,8], 0, 'far outside' ],
    ],
    [
        diamond => [[0,2],[2,4],[4,2],[2,0]],
        [ [0,2], -1, 'first vertex' ],
        [ [2,4], -1, 'upper vertex' ],
        [ [4,2], -1, 'right vertex' ],
        [ [2,0], -1, 'lower vertex' ],
    ],
    [
        square => [[0,0],[2,0],[2,2],[0,2]],
        [ [2,2], -1, 'vertex point' ],
        [ [1,2], -1, 'edge point' ],
        [ [1,1], 1, 'inside' ],
        [ [3,0], 0, 'outside' ],
        [ [8,8], 0, 'far outside' ],
    ],
    [
        big_poly_file => \*DATA,
        [ [34.9821818,54.9026445], -1, 'vertex' ],
        [ [35.5846168,54.4395806], 1, 'deep inside' ],
        [ [33.7432200,55.2087300], 0, 'far outside but in bbox' ],
        [ [34.4161186,54.5149376], 0, 'outside near border' ],
        [ [34.4141363,54.5091271], 1, 'inside near border' ],
        [ [35.3430604,55.2730587], -1,'local upper vertex' ],
        [ [8,8], 0, 'very far outside' ],
#        [ [], 1, '' ],
    ],
);


for my $item ( @TESTS ) {
    my ($case, $contour, @tests) = @$item;
    my $t = Math::Polygon::Tree->new($contour);

    for my $test ( @tests ) { 
        my ($in, $expected, $name) = @$test;
        my $got = $t->contains($in);
        is( $got, $expected, "$case: $name" );
    }
}


done_testing();



__DATA__
RU-KLU

1
   34.9819063   54.9142909 
   34.9807074   54.9139512 
   34.9797337   54.9139033 
   34.9781759   54.9139832 
   34.9762564   54.9142391 
   34.9759782   54.9135675 
   34.9728068   54.9122242 
   34.9736136   54.9104172 
   34.974003    54.9090259 
   34.9744481   54.9082423 
   34.9784819   54.9060352 
   34.9787322   54.9055714 
   34.9793721   54.9052515 
   34.9792886   54.9048837 
   34.9796224   54.9037961 
   34.980763    54.90386   
   34.9821818   54.9026445 
   34.9826825   54.9019727 
   34.9832945   54.9017967 
   34.9848802   54.9012689 
   34.9856313   54.9016048 
   34.9895816   54.900837  
   34.9906108   54.8994933 
   34.9909157   54.8978438 
   34.9902167   54.8979784 
   34.9885802   54.8980729 
   34.9876017   54.897868  
   34.9867035   54.8973708 
   34.9858779   54.8965327 
   34.9855133   54.8960633 
   34.9852213   54.8953272 
   34.9848007   54.8948614 
   34.984003    54.8943489 
   34.9830846   54.8939139 
   34.9819539   54.8936063 
   34.9797531   54.8933125 
   34.9777198   54.8932976 
   34.9746653   54.8930599 
   34.9727775   54.8929832 
   34.9709319   54.8931285 
   34.9691845   54.8931043 
   34.9657521   54.8933225 
   34.9594847   54.8935961 



( run in 0.506 second using v1.01-cache-2.11-cpan-df04353d9ac )