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;
}
}