Как создать полигон 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 . Кстати, у вас есть идея найти случайную точку внутри многоугольника, у этого многоугольника нет дыры. еще раз спасибо

Другие вопросы по тегам