chiark / gitweb /
use edge centroid
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 2 Mar 2019 14:41:31 +0000 (14:41 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 2 Mar 2019 14:41:31 +0000 (14:41 +0000)
generate-board

index 85257356ae5c95c1dd81a70d6b20f8c7308fe209..7c79f96dd239ff3f800b9bcf7a681b5c37ca4743 100755 (executable)
@@ -136,11 +136,15 @@ sub calculate_centres () {
   #  $region{NAME}{Centre}
   foreach my $rr (values %region) {
     next if $rr->{Special};
-    my $poly = $rr->{Polygon};
     my $sum = Math::GSL::Vector->new(2);
-    $sum += $_->{Pos} foreach @$poly;
-    $rr->{Centre} = $sum * (1.0 / @$poly);
-    # xxx use mean edge location (ie weight by edge length)
+    my $wsum = 0;
+    foreach my $adj (@{ $rr->{Adj} }) {
+      my @ends = map { $_->{Pos} } @{ $adj->{Ends} };
+      my $w = ($ends[1] - $ends[0])->norm();
+      $sum += $w * $_ foreach @ends;
+      $wsum += $w;
+    }
+    $rr->{Centre} = $sum * (0.5 / $wsum);
   }
 }