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 )