2016-05-13 65 views
1

我想打印出兩個多邊形的交集。但是當兩個多邊形沒有交集時,我怎麼才能知道要避免打印呢? 因爲如果沒有交集,我不能調用$ pgons [0] - >多邊形,它給了我一個錯誤。
(所有多邊形中沒有孔)
謝謝!如何訪問Math :: Planar :: GPC功能和功能?

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"; 
      }  
     } 
    } 
} 
+0

我不知道你想解決ThisSuitIsBlackNot你需要你在談論(不是你的錯,只是我的無知),但是當什麼省略@和他的名字之間的空白,如@ThisSuitIsBlackNot。另外:他只會被注意到[如果他已經參與了對話](http://stackoverflow.com/editing-help#comment-formatting)(他目前沒有)。 PerlDuck

+0

@珀爾犬謝謝。我的意思是如何確定「@pgons」中是否存在真正的多邊形。如果沒有多邊形,$ pgons [0] - >多邊形將導致錯誤。 –

+3

'if(@pgons && $ pgons [0] && $ pgons [0] - > polygons){...}' – mob

回答

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 
+0

好吧!謝謝Hakon。我發現這個問題後,我意識到@pgons的大小可以用於此目的。我使用如果$#pgons> = 0。 –