Как получить доступ к функциям и возможностям Math::Planar::GPC?
Я хочу распечатать пересечение двух полигонов. но когда нет пересечения двух многоугольников, как я могу узнать, чтобы избежать печати? Потому что, если пересечения нет, я не могу вызвать $pgons[0]->polygons, это выдает ошибку.
(нет отверстий во всех многоугольниках)
Спасибо!
for my $x(0..$#polygon){
for my $y(0..$#polygon){
if ($x != $y){
my $it = GpcClip('INTERSECTION', $polygon[0]->convert2gpc, $polygon[1]->convert2gpc);
print FO "$x == $y \n";
my @pgons = Gpc2Polygons($it);
#since here we don't have holes, only the first one is a valid polygon
if(@pgons){
print FO Dumper($pgons[0]->polygons->[0]);
print "\n";
}
}
}
}
1 ответ
Решение
Это похоже на Gpc2Polygons
возвращает пустой массив, если пересечение не найдено. Таким образом, чтобы определить, является ли пересечение непустым, вы можете проверить, больше ли длина возвращаемого массива, чем ноль. Например:
use feature qw(say);
use strict;
use warnings;
use Math::Geometry::Planar;
my $p1 = Math::Geometry::Planar->new;
my $p2 = Math::Geometry::Planar->new;
$p1->points([[0, 0], [0, 2], [2, 2], [2, 0]]);
for my $pos (1, 1.5, 2) {
say "pos = $pos";
$p2->points([[$pos, 0], [$pos, 2], [$pos + 2, 2], [$pos + 2, 0]]);
my $intersect = GpcClip( 'INTERSECTION', $p1->convert2gpc, $p2->convert2gpc );
my @pgons = Gpc2Polygons( $intersect );
if ( @pgons > 0 ) {
say " Found intersection";
}
else {
say " No intersection";
}
}
Выход:
pos = 1
Found intersection
pos = 1.5
Found intersection
pos = 2
No intersection