Ramer-Douglas-Peucker line simplification: Difference between revisions

m
→‎{{header|Perl 6}}: yet more code twiddling
m (→‎{{header|Perl 6}}: more minor code tweaking)
m (→‎{{header|Perl 6}}: yet more code twiddling)
Line 140:
sub Ramer-Douglas-Peucker( @points where * > 1, \ε = 1 ) {
return @points if @points == 2;
my ($index, $dmax)@d = (0,0^@points);.map:
for { perpendicular-distance(@points[0], ^..^@points[*-1], @points[$_]) {};
my ($index, $dmax) = @d.grep: @d.max, :kv;
my $d = perpendicular-distance(@points[0], @points[*-1], @points[$_]);
 
if $d > $dmax {
$dmax = $d;
$index = $_
}
}
if $dmax > ε {
return Ramer-Douglas-Peucker( @points[0..$index] , ε )[0..*-2],
10,333

edits