Как создать полигон GPC для использования с Math::Geometry::Planar::GpcClip?
Я пытаюсь использовать GpcClip()
функция из https://metacpan.org/pod/Math::Geometry::Planar, чтобы найти пересечение двух многоугольников. Я построил два полигона, используя Math::Geometry::Planar->new();
но я получил следующую ошибку, когда я использовал их в GpcClip()
:
Введите ошибку в аргумент 2 gpc_polygon_clip. Ожидаемый _p_gpc_polygon в c:/strawberry/perl/site/lib/math/geometry/planar.pm line 2028
Как я могу конвертировать объект, возвращенный Math::Geometry::Planar->new()
в полигон GPC?
2 ответа
Согласно документации, вы можете использовать convert2gpc
метод:
$ polygon-> convert2gpc;
Преобразует многоугольник / контур в структуру gpc и возвращает полученную структуру gpc
Пример:
use strict;
use warnings 'all';
use Math::Geometry::Planar;
my $outer = Math::Geometry::Planar->new;
my $inner = Math::Geometry::Planar->new;
$outer->points([[0, 0], [0, 3], [3, 3], [3, 0]]);
$inner->points([[1, 1], [1, 2], [2, 2], [2, 1]]);
my $diff = GpcClip('DIFFERENCE', $outer->convert2gpc, $inner->convert2gpc);
use strict;
use warnings 'all';
use Data::Dumper;
use Math::Geometry::Planar;
my $outer = Math::Geometry::Planar->new;
my $inner = Math::Geometry::Planar->new;
$outer->points([[0, 0], [0, 3], [3, 3], [3, 0],[0,0]]);
$inner->points([[2, 0], [2, 2], [4, 2], [4, 0],[2,0]]);
my $diff = GpcClip('INTERSECTION', $outer->convert2gpc, $inner->convert2gpc);
#first polygon rep the outer poly, the rest of them are holes
my @pgons = Gpc2Polygons($diff);
#since here we don't have holes, only the first one is a valid polygon
print Dumper($pgons[0]->polygons->[0]);
#convert the points into Planar Polygon
my $result = Math::Geometry::Planar->new;
$result->points($pgons[0]->polygons->[0]);
print Dumper($result);
Цените помощь от @ThisSuitlsBlackNot . Кстати, у вас есть идея найти случайную точку внутри многоугольника, у этого многоугольника нет дыры. еще раз спасибо