2016-05-13 2 views
1

2つのポリゴンの交差点を印刷したい。しかし、2つのポリゴンの交差がない場合、どのように印刷するのを避けるために知ることができますか? 交差点がなければ、$ pgons [0] - > polygonsを呼び出すことができないので、エラーです。
(すべてのポリゴンに穴がない)
ありがとう!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のように '@ 'と彼の名前の間の空白を省略するようにしてください。 Plus:彼は[彼がすでに会話に参加していれば]気付かれるでしょう(彼は現在はしていません)。(http://stackoverflow.com/editing-help#comment-formatting) PerlDuck

+0

@Perl Dogありがとうございます。私は "@pgons"に実際のポリゴンがあるかどうかを判断する方法を意味します。ポリゴンがない場合、$ pgons [0] - > polygonsはエラーを引き起こします。 –

+3

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

答えて

1

Gpc2Polygonsは何の交差点が見つからなかった空の配列を返すように思えます。したがって、交差点が空でないかどうかを調べるには、返される配列の長さが0より大きいかどうかを調べることができます。たとえば:

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

大丈夫です!ありがとうございます。私は、この質問を投稿した後、この目的のために@pgonsのサイズを使用できることに気付きました。 $#pgons> = 0の場合に使用します。 –

関連する問題