for (my $n=1;$n<=$neighboorCNT;$n++) { if ($neighborEdges->{$n}) { #### for my $n (@$neighborEdges){ #### sub Determinant { return ($_[0]*$_[3] - $_[2]*$_[1]); } #### sub SegmentIntersection { my @points = @{$_[0]}; my @p1 = @{$points[0]}; # p1,p2 = segment 1 my @p2 = @{$points[1]}; my @p3 = @{$points[2]}; # p3,p4 = segment 2 my @p4 = @{$points[3]}; my $d = Determinant(($p2[0]-$p1[0]),($p3[0]-$p4[0]), ($p2[1]-$p1[1]),($p3[1]-$p4[1])); if (abs($d) < $delta) { return 0; # parallel } my $n1 = Determinant(($p3[0]-$p1[0]),($p3[0]-$p4[0]), ($p3[1]-$p1[1]),($p3[1]-$p4[1])); my $n2 = Determinant(($p2[0]-$p1[0]),($p3[0]-$p1[0]), ($p2[1]-$p1[1]),($p3[1]-$p1[1])); if ($d > 0){ return $n1 < $d && $n2 < $d && $n1 > 0 && $n2 > 0; } else { return $n1 > $d && $n2 > $d && $n1 < 0 && $n2 < 0; } }